getWindow().getDecorView()
<style name="AppTheme.Slide" parent="@style/AppTheme"> <!--Required--> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@style/AppTheme.Slide.Animation</item> </style>
/**
* 根据手指移动的距离判断是否拦截触摸事件
*
* @param ev
* @return
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int x = (int) ev.getX();
int y = (int) ev.getY();
boolean mIntercept = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mInterceptDownX = x;
mLastInterceptX = x;
mLastInterceptY = y;
break;
case MotionEvent.ACTION_MOVE:
int moveX = x - mLastInterceptX;
int moveY = y - mLastInterceptY;
//按下的位置的X位置小于屏幕的十分之一,并且x移动的距离大于y移动的距离,就拦截
if (mInterceptDownX < (getWidth() / 10) && Math.abs(moveX) > Math.abs(moveY)) {
mIntercept = true;
} else {
mIntercept = false;
}
mLastInterceptX = x;
mLastInterceptY = y;
break;
case MotionEvent.ACTION_UP: //抬起的时候重置参数
mIntercept = false;
mInterceptDownX = mLastInterceptX = mLastInterceptY = 0;
break;
}
return mIntercept;
}
private int mTouchDownX;
private int mLastTouchX;
private int mLastTouchY;
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean mConsumed = false;
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mTouchDownX = x;
mLastTouchX = x;
mLastTouchY = y;
break;
case MotionEvent.ACTION_MOVE:
int moveX = x - mLastTouchX;
int moveY = y - mLastTouchY;
if (mTouchDownX < (getWidth() / 10) && Math.abs(moveX) > Math.abs(moveY) && !mConsumed) {
mConsumed = true;
}
if (mConsumed) {
int rightMoveX = (int) (mLastTouchX - event.getX());
if ((getScrollX() + rightMoveX) > 0) { //向左滑动的时候,getScrollX()和rightMoveX都大于0,所以禁止滑动
scrollTo(0, 0);
} else {
scrollBy(rightMoveX, 0);
}
}
mLastTouchX = x;
mLastTouchY = y;
break;
case MotionEvent.ACTION_UP:
mConsumed = false;
mTouchDownX = mLastTouchX = mLastTouchY = 0;
if(-getScrollX()<getWidth()/2){ //偏移量不到屏幕宽度的一般,就回到最初的位置
scrollBack();
}else{
scrollFinish();
}
break;
case MotionEvent.ACTION_CANCEL:
mConsumed = false;
mTouchDownX = mLastTouchX = mLastTouchY = 0;
if(-getScrollX()<getWidth()/2){ //偏移量不到屏幕宽度的一般,就回到最初的位置
scrollBack();
}else{
scrollFinish();
}
break;
}
return true;
}
/**
* 滑动到最初的位置
*/
private void scrollBack() {
int startX = getScrollX();
int dx = -getScrollX();
mScroller.startScroll(startX, 0, dx, 0, 300);
invalidate();
}
/**
* 向右滑动关闭
*/
private void scrollFinish(){
int dx = -getScrollX() - getWidth();
mScroller.startScroll(getScrollX(),0,dx,0,300);
invalidate();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(enableRightSliding()){
SlidingLayout slidingLayout = new SlidingLayout(this);
slidingLayout.replaceCurrentLayout(this);
}
}
/**
* 子类重写这个方法true:允许向右滑动,false:禁止向右滑动
* @return
*/
protected boolean enableRightSliding(){
return false;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有