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

實現(xiàn)方法
為了實現(xiàn)搖晃刷新功能,這里需要使用重力加速器(Accelerometer)。
首先,需要保證在搖晃刷新或者移動手機的時候不會發(fā)生誤操作,這里需要實現(xiàn)對傳感器的控制,保證捕抓到的是用戶想要的搖動操作。另外,我們在實現(xiàn)這 個邏輯操作的時候需要和UI的代碼分離,建議不要把界面邏輯代碼和其它的代碼混雜在一起,把它獨立出來方便重用。所以首先新建一個ShakeEventManager類,這個類需要對傳感器事件進行監(jiān)聽:
public class ShakeEventManager implements SensorEventListener { .. }為了監(jiān)聽傳感器,這里實現(xiàn)了SensorEventListener接口,然后就要操作重力加速度傳感器,把我們寫的這個類注冊成事件監(jiān)聽器:
public void init(Context ctx) { sManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE); s = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); register(); }接著實現(xiàn)register()方法:
public void register() { sManager.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL); }在觸發(fā)刷新事件的時候,需要對一些條件進行檢測,以保證用戶是有意在搖動手機:
加速度必須大于某個臨界值;
必須出發(fā)一些固定的加速傳感器事件;
這些事件發(fā)生的時間必須在一定的范圍內。
這里把這個實現(xiàn)邏輯代碼寫在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; }在知道***的加速度值后,這里實現(xiàn)了之前的判斷邏輯:
@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(); } } }從代碼看,第三行計算了加速度的值然后與一個臨界值作對比(第五行)。如果是***次搖動,就保存當前時間,看看在一定的時間內其它的事件有沒有觸發(fā)。如果所有條件都滿足了,就會調用接口中的回調方法:
public static interface ShakeListener { public void onShake(); }以上已經(jīng)實現(xiàn)了搖動事件管理,然后我們需要新建一個簡單的App來使用它。只需新建一個帶有一個ListView的簡單Activity,然后讓它搖動的時候可以刷新ListView:
public class MainActivity extends ActionBarActivity implements ShakeEventManager.ShakeListener { .... @Override public void onShake() { // We update the ListView } }可以看到,在第五行的時候界面刷新了,因為在用戶搖動手機的時候,這個方法已經(jīng)被調用。
***需要考慮一些問題:在App停止的時候,我們需要注銷這個監(jiān)聽器,因為一直監(jiān)聽事件會很費電。另外在App恢復運行的時候,需要再重新注冊這個監(jiān)聽器:
Override protected void onResume() { super.onResume(); sd.register(); } @Override protected void onPause() { super.onPause(); sd.deregister(); }以上就是關于“Android中如何實現(xiàn)搖晃刷新”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當前名稱:Android中如何實現(xiàn)搖晃刷新-創(chuàng)新互聯(lián)
本文來源:http://www.chinadenli.net/article22/decgcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、標簽優(yōu)化、外貿建站、定制網(wǎng)站、用戶體驗、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容