看到微信Activity有右滑退出的功能,所以自己也想实现一个,根据网上有很多实现的代码,以下是我自己实现的方式,如果有不合适的,欢迎指教
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
/**
* 可右滑退出的Activity
* 注意:不兼容NumberPicker的主题,继承本Activity后再Manifest.xml文件中对应Activity的theme要设置成@android:style/Theme.Translucent.NoTitleBar(透明)
* Created by 静平 on 2016/11/16.
*/
public class ScrollFinishActivity extends Activity {
private float lastX;
private View rootView;
private boolean canScroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rootView = getWindow().getDecorView();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
lastX = ev.getX();
if (lastX < SystemUtils.dip2px(this,15)){
lastX = ev.getX();
canScroll = true;
}
case MotionEvent.ACTION_MOVE:
if (canScroll) {
ObjectAnimator.ofFloat(rootView, "TranslationX", rootView.getX(), rootView.getX() + ev.getX() - lastX).setDuration(0).start();
lastX = ev.getX();
}
break;
case MotionEvent.ACTION_UP:
if (rootView.getX()>getResources().getDisplayMetrics().widthPixels/2){
ObjectAnimator animator = ObjectAnimator.ofFloat(rootView, "TranslationX", rootView.getX(), getResources().getDisplayMetrics().widthPixels).setDuration(100);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
finish();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
}else {
ObjectAnimator animator = ObjectAnimator.ofFloat(rootView, "TranslationX", rootView.getX(), 0).setDuration(100);
animator.start();
}
lastX = 0;
canScroll = false;
break;
}
if (canScroll){
return canScroll;
}else {
return super.dispatchTouchEvent(ev);
}
}
}