91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中如何實現搖晃刷新

發布時間:2022-04-12 14:08:37 來源:億速云 閱讀:139 作者:iii 欄目:編程語言

這篇“Android中如何實現搖晃刷新”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android中如何實現搖晃刷新”文章吧。

實現方法

為了實現搖晃刷新功能,這里需要使用重力加速器(Accelerometer)。

首先,需要保證在搖晃刷新或者移動手機的時候不會發生誤操作,這里需要實現對傳感器的控制,保證捕抓到的是用戶想要的搖動操作。另外,我們在實現這 個邏輯操作的時候需要和UI的代碼分離,建議不要把界面邏輯代碼和其它的代碼混雜在一起,把它獨立出來方便重用。所以首先新建一個ShakeEventManager類,這個類需要對傳感器事件進行監聽:

public class ShakeEventManager implements SensorEventListener { .. }

為了監聽傳感器,這里實現了SensorEventListener接口,然后就要操作重力加速度傳感器,把我們寫的這個類注冊成事件監聽器:

public void init(Context ctx) {     sManager = (SensorManager)  ctx.getSystemService(Context.SENSOR_SERVICE);     s = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);     register(); }

接著實現register()方法:

public void register() {     sManager.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL); }

在觸發刷新事件的時候,需要對一些條件進行檢測,以保證用戶是有意在搖動手機:

  • 加速度必須大于某個臨界值;

  • 必須出發一些固定的加速傳感器事件;

  • 這些事件發生的時間必須在一定的范圍內。

這里把這個實現邏輯代碼寫在onSensorChanged方法里,這個方法在加速器的值有效的時候都會被調用。***步 要計算這個加速度的值。這里還需要知道三個坐標的***加速度值,然后減去重力的值在三個方向上的分量。像Android官方教程文檔中說明的那樣,首先進 行一層過濾,把重力的分量減掉,然后在進行另外的坐標分量處理:

private float calcMaxAcceleration(SensorEvent event) {     gravity[0] = calcGravityForce(event.values[0], 0);     gravity[1] = calcGravityForce(event.values[1], 1);     gravity[2] = calcGravityForce(event.values[2], 2);        float accX = event.values[0] - gravity[0];     float accY = event.values[1] - gravity[1];     float accZ = event.values[2] - gravity[2];        float max1 = Math.max(accX, accY);     return Math.max(max1, accZ); }

看看calcGravityForce這個方法:

// Low pass filter private float calcGravityForce(float currentVal, int index) {     return  ALPHA * gravity[index] + (1 - ALPHA) * currentVal; }

在知道***的加速度值后,這里實現了之前的判斷邏輯:

@Override public void onSensorChanged(SensorEvent sensorEvent) {     float maxAcc = calcMaxAcceleration(sensorEvent);     Log.d("SwA", "Max Acc ["+maxAcc+"]");     if (maxAcc >= MOV_THRESHOLD) {         if (counter == 0) {             counter++;             firstMovTime = System.currentTimeMillis();             Log.d("SwA", "First mov..");         } else {             long now = System.currentTimeMillis();             if ((now - firstMovTime) = MOV_COUNTS)                 if (listener != null)                     listener.onShake();         }     }    }

從代碼看,第三行計算了加速度的值然后與一個臨界值作對比(第五行)。如果是***次搖動,就保存當前時間,看看在一定的時間內其它的事件有沒有觸發。如果所有條件都滿足了,就會調用接口中的回調方法:

public static interface ShakeListener {     public void onShake(); }

測試App

以上已經實現了搖動事件管理,然后我們需要新建一個簡單的App來使用它。只需新建一個帶有一個ListView的簡單Activity,然后讓它搖動的時候可以刷新ListView:

public class MainActivity extends ActionBarActivity implements ShakeEventManager.ShakeListener { ....      @Override     public void onShake() {        // We update the ListView     } }

可以看到,在第五行的時候界面刷新了,因為在用戶搖動手機的時候,這個方法已經被調用。

***需要考慮一些問題:在App停止的時候,我們需要注銷這個監聽器,因為一直監聽事件會很費電。另外在App恢復運行的時候,需要再重新注冊這個監聽器:

Override protected void onResume() {     super.onResume();     sd.register(); }    @Override protected void onPause() {     super.onPause();     sd.deregister(); }

以上就是關于“Android中如何實現搖晃刷新”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

论坛| 徐闻县| 镇江市| 涿鹿县| 德令哈市| 环江| 晋宁县| 外汇| 夏河县| 噶尔县| 宝丰县| 闽清县| 庄浪县| 丰城市| 昌黎县| 唐河县| 泾阳县| 开鲁县| 三门县| 马关县| 观塘区| 鄂伦春自治旗| 二手房| 万年县| 桃园市| 大埔区| 阳城县| 云林县| 和静县| 沙坪坝区| 松滋市| 巨野县| 常熟市| 白城市| 宝清县| 北川| 资中县| 永春县| 白河县| 乐陵市| 台南县|