自定义实现了一个开发过程中遇到的一个需求。即右滑关闭当前acitvity,没有像某个大神一样考虑那么多情况,只是满足个人需要。
下面看实现
- 定义View
/**
* 用于右滑关闭activity
* @author Richard
*
*/
public class RightSlideFinishView extends FrameLayout {
private GestureDetector mGD;
private Activity mActivity;
public RightSlideFinishView(Context context) {
super(context);
mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX()); // 计算滑动的距离
if (Math.abs(dx) > 100 && Math.abs(velocityX) > Math.abs(velocityY)) { // 降噪处理,必须有较大的动作才识别
if (velocityX > 0) {
//向右边
mActivity.finish();
} else {
// 向左边
Log.i("aaa","aaa");
}
return true;
} else {
return false; // 当然可以处理velocityY处理向上和向下的动作
}
}
});
}
// 接下来是重点,让我们的View接受触控
@Override
public boolean onTouchEvent(MotionEvent event) {
mGD.onTouchEvent(event);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return mGD.onTouchEvent(event);
}
public void attachToActivity(Activity activity) {
mActivity = activity;
TypedArray a = activity.getTheme().obtainStyledAttributes(
new int[] { android.R.attr.windowBackground });
int background = a.getResourceId(0, 0);
a.recycle();
ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
decorChild.setBackgroundResource(background);
decor.removeView(decorChild);
addView(decorChild);
decor.addView(this);
}
2 . 使用
BaseActivity中添加如下代码,其他作为其他activity的父类
protected RightSlideFinishView layout;
layout=new RightSlideFinishView(this);
layout.attachToActivity(this);
Over~
本文介绍了一种自定义实现的右滑关闭当前Activity的方法。通过创建一个名为RightSlideFinishView的自定义View,该View能够监听并处理水平方向的滑动手势。当检测到向右滑动时,会触发Activity的finish()方法来关闭当前页面。
1181

被折叠的 条评论
为什么被折叠?



