標籤:min 位移 視頻播放器 from 滑動 XML 布局檔案 連結地址 sni
??
Android視頻播放器螢幕左側邊隨手指上下滑動亮度調節變暗變亮原理實現(2):後續改進
附錄文章1雖然實現了在螢幕左半邊隨手指上滑/下滑實現明暗度的調節,但是有一個不完美的地方:當手指在螢幕左半邊水平左滑/右滑時候,也一樣會觸發明暗度的調節。這是不完美的,假設當前的那個view是一個視頻播放器view,如果使用者的手指在水平方向左滑/右滑,顯然,意圖是快進/快退,而不是調整明暗度,所以需要對附錄文章1的代碼改進,實現正確的邏輯。
需要改進的地方集中在dispatchTouchEvent,改進思路:如果使用者手指在左半邊移動的水平(x座標軸)方向和垂直(y座標軸)方向的位移,只有當在垂直(y座標軸)的位移大於水平(x座標軸)方向時候,才認為這是一次有效明暗度調節操作,否則判定是水平方向普通位移,然後將此事件不要消費掉,繼續往下傳遞該事件。
改進後的附錄文章1上層Java代碼:
package zhangphil.app;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.TextView;public class MainActivity extends Activity { private float startY = 0;//手指按下時的Y座標 private float startX = 0;//手指按下時的Y座標 private TextView brightnessTextView; private View mVideoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mVideoView = LayoutInflater.from(this).inflate(R.layout.activity_main, null); setContentView(mVideoView); brightnessTextView = (TextView) mVideoView.findViewById(R.id.text); } /* * 設定螢幕亮度 * 0 最暗 * 1 最亮 */ public void setBrightness(float brightness) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = lp.screenBrightness + brightness / 255.0f; if (lp.screenBrightness > 1) { lp.screenBrightness = 1; } else if (lp.screenBrightness < 0.1) { lp.screenBrightness = (float) 0.1; } getWindow().setAttributes(lp); float sb = lp.screenBrightness; brightnessTextView.setText((int) Math.ceil(sb * 100) + "%"); } @Override public boolean onTouchEvent(MotionEvent event) { int screenWidth = mVideoView.getWidth(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); startY = event.getY(); break; case MotionEvent.ACTION_MOVE: float endX = event.getX(); float endY = event.getY(); float distanceY = startY - endY; if (startX > screenWidth / 2) { //右邊 //在這裡處理音量 } else { //這段代碼是為了修複一個bug //bug:當手指在螢幕左邊水平移動時候本來應該是快進快退,但是卻變成敏感度調整 //增加這一些代碼,可以實現在螢幕左邊水平移動時候是快進快退邏輯,而不是調整明暗度 // by phil float distanceX = Math.abs(endX - startX); if (distanceX > Math.abs(distanceY)) { //Log.d("位移",distanceX+","+distanceY); return false; } //螢幕左半部分上滑,亮度變大,下滑,亮度變小 final double FLING_MIN_DISTANCE = 1; final double FLING_MIN_VELOCITY = 1; if (distanceY > FLING_MIN_DISTANCE && Math.abs(distanceY) > FLING_MIN_VELOCITY) { setBrightness(10); } if (distanceY < FLING_MIN_DISTANCE && Math.abs(distanceY) > FLING_MIN_VELOCITY) { setBrightness(-10); } } break; } return super.onTouchEvent(event); }}
布局檔案:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/ic_launcher"> <TextView android:id="@+id/text" android:layout_width="150dp" android:layout_height="50dp" android:layout_gravity="center" android:background="@android:color/holo_orange_light" android:gravity="center" android:textColor="@android:color/white" /></FrameLayout>
致謝:
馮祖學對本文亦有貢獻!
附錄:
1,《Android視頻播放器螢幕左側邊隨手指上下滑動亮度調節變暗變亮原理實現》連結地址:http://blog.csdn.net/zhangphil/article/details/56831156
Android視頻播放器螢幕左側邊隨手指上下滑動亮度調節變暗變亮原理實現(2):後續改進