Android getLocationOnScreen问题:坐标错误

时间:2011-07-27 11:08:14

标签: android drag-and-drop coordinates

我在获取视图坐标方面遇到了问题。我在LinearLayout中放置了三个自定义视图。当我触摸其中任何一个时,我的坐标错误。例如,第二个视图位于中心,但getLocationOnScreen()返回x = 0.这是不可能的。 这个坐标总是不同于我可以通过event.getX()和event.getY()获得的值。

拜托,你能告诉我,这是什么问题?

结果(通过Log.w)

第一个视图:onTouch_coords:0,50

第二种观点:onTouch_coords:0,98

第三种观点:onTouch_coords:0,146

这是gui xml文件:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <com.remaller.android.DragAndDropBasicsInheriting.DragableView  
        android:id="@+id/DragableView1" 
        android:layout_height="wrap_content"
        android:src = "@drawable/icon" android:layout_width="wrap_content"/>

    <com.remaller.android.DragAndDropBasicsInheriting.DragableView  
        android:id="@+id/DragableView2" 
        android:layout_height="wrap_content"
        android:src = "@drawable/icon" android:layout_width="match_parent"/>

    <com.remaller.android.DragAndDropBasicsInheriting.DragableView  
        android:id="@+id/DragableView3" 
        android:src = "@drawable/icon" android:layout_width="wrap_content" android:layout_height="match_parent"/>

</LinearLayout>

这是我的DragableView的源代码:

    public class DragableView extends ImageView
{
    private void init()
    {

    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        int action = event.getAction();

        int this_coords[] = {0,0};
        this.getLocationOnScreen(this_coords);

        Log.w("daxh","onTouch_coords: "+this_coords[0]+", "+this_coords[1]);

        switch(action)
        {
            case MotionEvent.ACTION_DOWN:

            break;

            case MotionEvent.ACTION_MOVE:

            break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
            default:

            break;
        }

        return super.onTouchEvent(event);
    }

    public DragableView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    public DragableView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

    public DragableView(Context context)
    {
        super(context);
        init();
    }
}

这是活动代码:

   public class DragAndDropBasicsInheritingActivity extends Activity
{
    public static final int CREATE = 0x00000001;

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

1 个答案:

答案 0 :(得分:1)

this.getLocationOnScreen(this_coords);它始终会返回this View,a.k.a DragableView的位置。 method specification here.

由于此视图是您的主视图,因此肯定会显示x=0

event.getX()为您提供了执行事件的坐标x,例如触摸,拖动......

对于两个对象,这是两种不同的方法。