實現一個View的位置改變

一、新建一個R.layout.activity_main佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    tools:context=".MainActivity">

    <com.wq.toucheventdemo.MyTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        android:text="Hello World!"
        />

</LinearLayout>

二、自定義MyTextView

/**
 * 描述     實現一個滑動View的位置改變
 * 創建     wangqi
 * 日期    2020/6/1
 */
public class MyTextView extends AppCompatTextView {
    private static final String TAG = "wq892373445";

    public MyTextView(Context context) {
        super(context);
        Log.d(TAG,"MyTextView()");
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        Log.d(TAG,"MyTextView()");
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Log.d(TAG,"MyTextView()");
    }
    private float mPreY = 0;
    private float sensity = 5;
    private float delta = 0.0f;
    private float mRawY = 0;

    private float mPreX = 0;
    private float sensityX = 5;
    private float deltaX = 0.0f;
    private float mRawX = 0;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d(TAG,"onTouchEvent() event.getAction()" +event.getAction());
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            mPreY = event.getY();
            mRawY = event.getRawY();

            mPreX = event.getX();
            Log.d(TAG,"onTouchEvent() ACTION_DOWN mPreY " +mPreY);
            Log.d(TAG,"onTouchEvent() mRawY " +mRawY);
        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            Log.d(TAG,"onTouchEvent() ACTION_MOVE 1 event.getY() " +event.getY());
            delta = event.getY() - mPreY;
            deltaX = event.getX() - mPreX;
            Log.d(TAG,"onTouchEvent() delta " +delta);
            mPreY = event.getY();
            if (delta > sensity || delta < -5) { // simplly missing click
                onScrollY(delta);
            }
            if (deltaX > sensityX || deltaX < -5) { // simplly missing click
                onScrollX(deltaX);
            }
            Log.d(TAG,"onTouchEvent() ACTION_MOVE 2 event.getY() " +event.getY());
        }else if (event.getAction() == MotionEvent.ACTION_UP) {
            mPreY = event.getY();
            Log.d(TAG,"onTouchEvent() ACTION_UP  mPreY " +mPreY);
        }
        return true;
    }
    private float curY;
    private int scroolDelta;
    private int mParentWidth = 1600;
    private int mParentHeight = 400;
    public void onScrollY(float curDelta) {
        Log.d(TAG,"onScroll() curDelta " +curDelta);
        curY = getTranslationY();
        curY = curY + curDelta;
        Log.d(TAG,"onScroll() curY= " + curY);
        scroolDelta = 5;
        if (scroolDelta > 0) {
            if (curY < 0) {
                curY = 0;
            } else if (curY > scroolDelta) {
                curY = scroolDelta;
            }
            setTranslationY(curY);
        } else {
            if (curY > 0) {
                curY = 0;
            } else if (curY < scroolDelta) {
                curY = scroolDelta;
            }
            setTranslationY(curY);
        }
        Log.d(TAG,"onScroll  curY =" + curY + " scroolDelta; " + scroolDelta + " scroolDelta ; " + scroolDelta);
    }

    private float curX;
    private int scroolDeltaX;
    private int mParentWidthX = 1600;
    private int mParentHeightX = 400;
    public void onScrollX(float curDelta) {
        Log.d(TAG,"onScroll() curDelta " +curDelta);
        curX = getTranslationX();
        curX = curX + curDelta;
        Log.d(TAG,"onScroll() curY= " + curY);
        scroolDeltaX = 5;
        if (scroolDeltaX > 0) {
            if (curX < 0) {
                curX = 0;
            } else if (curX > scroolDeltaX) {
                curX = scroolDeltaX;
            }
            setTranslationX(curX);
        } else {
            if (curX > 0) {
                curX = 0;
            } else if (curX < scroolDeltaX) {
                curX = scroolDeltaX;
            }
            setTranslationY(curX);
        }
        Log.d(TAG,"onScrollX  curX =" + curX + " scroolDeltaX; " + scroolDeltaX + " scroolDeltaX ; " + scroolDeltaX);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章