爲了展示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);
}
@Override
public 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()
:當前觸摸點相對於當前控件的座標;