标签: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):后续改进
标签:min 位移 视频播放器 from 滑动 XML 布局文件 链接地址 sni
原文地址:http://blog.csdn.net/zhangphil/article/details/61194048