為了展示getX()、getRawX()和getTop()方法的區別,我們寫了一個簡單的測試Demo,我們寫了一個自定義控件(繼承ImageView)。
package com.demo.ui;import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;public class ImageViewTest extends ImageView {public ImageViewTest(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent event) {int eventaction = event.getAction();switch (eventaction){case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:int top, left;float rawx, rawy, x, y;top = getTop();left = getLeft();rawx = event.getRawX();rawy = event.getRawY();x = event.getX();y = event.getY();Log.i("TAG", "getTop() : " + top);Log.i("TAG", "getLeft() : " + left);Log.i("TAG", "getRawX() : " + rawx);Log.i("TAG", "getRawY() : " + rawy);Log.i("TAG", "getX() : " + x);Log.i("TAG", "getY() : " + y);break;case MotionEvent.ACTION_UP:break;}return super.onTouchEvent(event);}
}
當你觸摸ImageViewTest控件的時候:
-
getTop()、getLeft()
:當前控件左上角相對于父容器控件的坐標; -
getRawX()、getRawY()
:當前觸摸點相對于屏幕的坐標; -
getX()、getY()
:當前觸摸點相對于當前控件的坐標;