您的位置:首页 > 移动开发 > Android开发

android 右滑关闭activity

2016-01-13 16:15 567 查看
自定义实现了一个开发过程中遇到的一个需求。即右滑关闭当前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~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息