在buttonView中获取MotionEvent的相对位置

时间:2014-09-09 21:34:07

标签: android android-layout

enter image description here

private void buttonTouch(MotionEvent event, int num) {
    Log.v(TAG, num +" Button Click : X" + event.getX() + " Y:" +event.getY());
}

如果红色方块是一个按钮视图,并且用户点击它,event.getX()似乎会产生关于点击相对于绿松石字段或甚至整个屏幕的值的值。点击位于红色方块内是否有简单的方法?

我看到有一个功能可以获得按钮的高度和宽度,但我没有看到一个功能,它给我一个盒子的边缘或另一种方式来知道按钮的确切位置所以我可以用它来计算按钮中点击相对的位置。

1 个答案:

答案 0 :(得分:1)

我测试了这段代码,它获取了相对于自己视图的坐标(一个Button)。

我添加了一种方法来检索屏幕的宽度和高度,只是为了获得全局参考。

//活性

public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_activity);

        Button bt_test = (Button) findViewById(R.id.bt_test_1);
        bt_test.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent event) {
                Log.v("TAG_TOUCH", " Button Click: X " + event.getX() + " Y: " + event.getY());
                Point point = getSizeScreen();
                Log.v("TAG_SIZE_SCREEN", " Width: " + point.x + " Height: " + point.y);
                return true;
            }
        });

        Button bt_test_2 = (Button) findViewById(R.id.bt_test_2);
        bt_test_2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent event) {
                Log.v("TAG_TOUCH", " Button Click: X " + event.getX() + " Y: " + event.getY());
                Point point = getSizeScreen();
                Log.v("TAG_SIZE_SCREEN", " Width: " + point.x + " Height: " + point.y);
                return true;
            }
        });


    }

    private Point getSizeScreen() {
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        return size;
    }

}

//布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    android:orientation="horizontal"
    android:weightSum="2">

    <Button
        android:id="@+id/bt_test_1"
        android:layout_width="0dp"
        android:layout_height="300dp"
        android:layout_margin="10dp"
        android:layout_weight="1"
        android:background="#000000" />

    <Button
        android:id="@+id/bt_test_2"
        android:layout_width="0dp"
        android:layout_height="300dp"
        android:layout_margin="10dp"
        android:layout_weight="1"
        android:background="#000000" />

</LinearLayout>