成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應用開發簡單幾步實現搖一搖功能

開發 前端
在某些緊急情況下,搖一搖功能可以作為一種快速提醒方式。例如,在遇到危險或緊急狀況時,用戶可以快速搖動手機來觸發警報或發送求救信號。

微信搖一搖,抖音搖一搖面對面搖骰子等,手機APP搖一搖功能隨處可見,下面我們來實現一個簡單的搖一搖功能。

基本原理

  1. 利用加速度傳感器檢測設備的物理運動
  2. 監聽傳感器的數據用作搖一搖動作判定
  3. 根據設定的條件觸發搖一搖事件

常見應用場景:

  1. 「音樂和視頻控制」:許多音樂和視頻應用利用搖一搖功能來控制播放、暫停、下一曲等操作。用戶只需搖動手機,即可實現快速切換歌曲或視頻的功能。
  2. 「拍照」:一些相機應用使用搖一搖功能來快速拍照或切換前后攝像頭。通過搖動手機,用戶可以快速完成拍照過程,無需多余的操作步驟。
  3. 「啟動應用或功能」:搖一搖功能也可以用于啟動特定的應用或功能。例如,健康追蹤應用可能允許用戶通過搖動手機來快速查看計步器或運動數據。
  4. 「游戲控制」:在某些游戲中,搖一搖功能可以作為游戲控制方式之一。玩家可以通過搖動手機來控制角色的移動或執行特定動作,提供更直觀的控制方式。
  5. 「社交分享」:一些社交應用利用搖一搖功能來快速分享內容到其他平臺。用戶只需搖動手機,即可將內容自動分享到指定的社交媒體平臺。
  6. 「觸發緊急通知」:在某些緊急情況下,搖一搖功能可以作為一種快速提醒方式。例如,在遇到危險或緊急狀況時,用戶可以快速搖動手機來觸發警報或發送求救信號。

代碼示例

「實現效果」:在1.5s內出現兩次加速度達到15則觸發搖一搖

class ShakeManager : SensorEventListener {

    private var mContext: Context

    /**
     * 時間范圍
     */
    private var mIntervalTimeMillis: Long = 15000

    /**
     * 要換次數閾值
     */
    private var mThresholdCount: Int = 2

    /**
     * 加速度閾值
     */
    private var mShakeThreshold: Int = 15

    private var mSensorManager: SensorManager? = null
    private var mVibrator: Vibrator? = null
    private var mOnShakeListener: OnShakeListener? = null

    /**
     * 上一次搖晃時間
     */
    private var mLastShakeTimeMillis: Long = 0

    /**
     * 搖晃次數
     */
    private var mShakeCount = 0

    constructor(
        context: Context,
        intervalTimeMillis: Long,
        thresholdCount: Int,
        shakeThreshold: Int,
        onShakeListener: OnShakeListener
    ) {
        this.mContext = context
        this.mIntervalTimeMillis = intervalTimeMillis
        this.mThresholdCount = thresholdCount
        this.mShakeThreshold = shakeThreshold
        this.mOnShakeListener = onShakeListener

        mSensorManager = mContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
        mVibrator = mContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        mSensorManager?.registerListener(
            this,
            mSensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL
        )

    }

    override fun onSensorChanged(event: SensorEvent) {
        //加速度變化
        if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
            val currentTimeMillis = System.currentTimeMillis()
            //搖晃時間大于1500
            if (currentTimeMillis - mLastShakeTimeMillis > mIntervalTimeMillis) {
                mShakeCount = 0
            }
            val values = event.values
            if (abs(values[0]) > mShakeThreshold || abs(values[1]) > mShakeThreshold || abs(values[2]) > mShakeThreshold) {
                mLastShakeTimeMillis = currentTimeMillis
                mShakeCount += 1
                if (mShakeCount > mThresholdCount) {
                    mVibrator?.vibrate(100)
                    mShakeCount = 0
                    mLastShakeTimeMillis = 0
                    mOnShakeListener?.onShaked()
                }
            }
        }
    }

    override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
    }

    interface OnShakeListener {
        fun onShaked()
    }
}

圖片圖片

接下來搖晃手機,觸發搖一搖機制,字體變紅

圖片圖片

完整代碼:

<?xml versinotallow="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.TestActivity">
    
    <TextView
        android:id="@+id/tv_shake"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="請搖晃手機"
        android:textColor="@color/black"
        android:textSize="20sp" />
</LinearLayout>
class TestActivity : AppCompatActivity() {

    private val TAG = TestActivity::class.java.simpleName
    private lateinit var mBinding: ActivityTestBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityTestBinding.inflate(layoutInflater)
        setContentView(mBinding.root)
        ShakeManager(this, 1500, 2, 15, object : ShakeManager.OnShakeListener {
            override fun onShaked() {
                mBinding.tvShake.text = "觸發了搖一搖"
                mBinding.tvShake.setTextColor(0xFFFF0000.toInt())
            }
        })
    }
}

隨著技術發展,結合設備傳感器,可以開發出更多有趣和實用的應用。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2014-10-11 10:41:44

Windows Pho

2012-04-28 14:21:22

HTML5

2015-07-29 15:00:18

iPhone搖一搖

2023-11-14 15:51:38

蘋果系統App

2013-02-20 11:38:13

2015-03-04 11:09:42

微信搖一搖紅包

2014-07-11 14:55:59

傲游瀏覽器

2016-04-21 11:36:08

阿里無線技術營銷

2021-04-29 05:58:20

微信搖一搖抖音

2021-04-24 08:24:28

Windows10操作系統21H2

2015-03-03 09:59:31

微信搖一搖紅包

2015-05-15 15:10:16

紅包

2021-12-15 06:12:55

App

2015-12-29 16:58:03

飛凡

2015-01-22 15:44:55

Android源碼音樂播放器

2015-05-04 16:35:09

互聯網

2018-02-07 08:18:23

微信微信6.6.2刪除好友

2014-02-26 15:45:49

微軟必應

2015-12-02 14:36:03

魅族

2021-07-09 06:48:29

Spring Boot應用Keycloak
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清视频一区 | 久草精品在线 | 夜操 | 国产精品一区二区不卡 | 国产一区不卡 | 国产在线视频一区 | 久久久亚洲成人 | 日韩三级在线观看 | 免费午夜电影 | 天啪 | 国产美女永久免费无遮挡 | 欧美亚洲第一区 | 国产三级电影网站 | 成人精品网 | 精品日韩一区 | 久久久久av| 国产亚洲精品精品国产亚洲综合 | 欧美xxxx色视频在线观看免费 | 亚洲国产成人精品女人久久久野战 | 国产精品久久久久久久久久三级 | 日韩在线观看网站 | 精品久久久久久亚洲综合网站 | 天天插天天操 | 在线亚洲免费 | av激情影院 | 日韩理论电影在线观看 | 国内自拍偷拍 | 中文字幕在线一区 | 99爱视频 | 狠狠色狠狠色综合日日92 | 久久大| 91激情视频 | 久久久91精品国产一区二区三区 | 97久久精品午夜一区二区 | www.久久久久久久久久久久 | 精品久久一区 | 二区三区视频 | 91网在线观看 | 99久久精品免费看国产四区 | 亚洲欧洲精品一区 | 天天干天天干 |