У меня проблема с получением координат обзора. У меня есть три пользовательских вида, размещенных в 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);
}
}