Android getLocationOnScreen проблема: неправильные координаты - PullRequest
2 голосов
/ 27 июля 2011

У меня проблема с получением координат обзора. У меня есть три пользовательских вида, размещенных в LinearLayout. Когда я касаюсь любого из них, у меня неправильные координаты. Например, второе представление размещается в центре, но getLocationOnScreen () возвращает x = 0. Это невозможно. И эти координаты всегда отличаются от значений, которые я могу получить через event.getX () и event.getY ().

Пожалуйста, не могли бы вы сказать мне, в чем проблема?

Результаты (через Log.w)

Первый просмотр: onTouch_coords: 0, 50

Второй вид: onTouch_coords: 0, 98

Третий вид: onTouch_coords: 0, 146

Это XML-файл GUI:

    <?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 Ответ

1 голос
/ 28 декабря 2011

this.getLocationOnScreen(this_coords); всегда возвращает местоположение this View, a.k.a DragableView. спецификация метода здесь. .

Поскольку этот вид является вашим основным видом, он определенно покажет x=0

event.getX() дал вам координату x того, где вы выполнили событие, как прикосновение, перетащите ...

Это два разных метода для двух Объектов.

...