这一块内容暂时只是入门了解,后续还需要深入多操作。
参考书籍:Android开发艺术探索
此处是自定义的一个ImageView,主要就是通过重写onTouchEvent方法,判断滑动角度来拉起页面。(回调就是拉起一个activity)
package com.example.androidpratic.customview;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.example.androidpratic.fragment.ScreenSlidePageFragment;
@SuppressLint("AppCompatCustomView")
public class MyImageView extends ImageView {
private static final String TAG = "MyImageView";
private float mLastX;
private float mLastY;
private ScreenSlidePageFragment.ScrollCallBack mScrollCallBack;
private boolean mOpenFlag = false;
private float mYDistance;
public MyImageView(Context context) {
super(context);
}
public MyImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setScrollCallBack(ScreenSlidePageFragment.ScrollCallBack callBack) {
mScrollCallBack = callBack;
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
Log.d(TAG, "onTouchEvent......." + x + "," + y);
if(x < getRight() - getLeft() && y < getBottom() - getTop()) {
switch (event.getAction() & event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "onTouchEvent down............");
break;
case MotionEvent.ACTION_MOVE:
mYDistance = mLastY - y;
double tan = Math.atan2(Math.abs(mYDistance), Math.abs(mLastX - x));
double arg = 180 * tan / Math.PI;
Log.d(TAG, "onTouchEvent move............" + arg + "," + mYDistance);
if (arg > 45 && mYDistance > 0) {
getParent().requestDisallowInterceptTouchEvent(true);
mOpenFlag = true;
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "onTouchEvent up............");
if (mOpenFlag) {
mScrollCallBack.openWeb();
mOpenFlag = false;
}
break;
default:
break;
}
}
mLastX = event.getX();
mLastY = event.getY();
return super.onTouchEvent(event);
}
}
调用主要就是这样,setClickable必须加,不然没响应。
mImageView = inflateView.findViewById(R.id.slide_page);
mImageView.setScrollCallBack(mScrollCallBack);
mImageView.setClickable(true);