我在获取视图坐标方面遇到了问题。我在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);
}
}
答案 0 :(得分:1)
this.getLocationOnScreen(this_coords);
它始终会返回this
View,a.k.a DragableView
的位置。 method specification here.。
由于此视图是您的主视图,因此肯定会显示x=0
event.getX()
为您提供了执行事件的坐标x,例如触摸,拖动......
对于两个对象,这是两种不同的方法。