我的主Activity中有一个自定义的floorplanView类。此自定义视图占用了大约一半的屏幕空间。我试图简单地创建一个星形图像并将其放置在平面图上onTouch。但是,出于某种原因,这似乎将图像放在我触摸的位置下方(我尝试了一些变化而无法解决)。
public class FloorplanView extends RelativeLayout {
public FloorplanView(Context context, AttributeSet attrs) {
super(context, attrs);
SCROLL_THRESHOLD = getResources().getDimensionPixelSize(R.dimen.margin5);
setClipChildren(false);
setOnTouchListener(new FloorplanTouchListener());
}
public class FloorplanTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
posX = event.getRawX() - v.getX();
posY = event.getRawY() - v.getY();
break;
case MotionEvent.ACTION_UP:
ImageView img = new ImageView(getContext());
img.setOnTouchListener(new FlagTouchListener());
img.setBackground(getResources().getDrawable(android.R.drawable.btn_star));
img.setX(event.getRawX()); //Used posX/Y without success
img.setY(event.getRawY());
addView(img);
break;
}
return true;
}
}
}
除此之外,有没有办法通过扩展一个relativeLayout来设置我的自定义类的边界,这样当我拖动和移动我的图像(设置和工作)时,它不会超出Floorplanview自定义类。 / p>
修改 父Activity类XML
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.fcs_systems.inspector.FloorplanActivity">
<TextView
android:id="@+id/txtFloorplanName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Floorplan Name"
android:visibility="gone"/>
<com.fcs_systems.inspector.FloorplanView
android:id="@+id/floorplanView"
android:background="@color/fcs_red"
android:layout_width="match_parent"
android:layout_height="200dp"/>
</RelativeLayout>
答案 0 :(得分:0)
根据文件,
float getRawX():返回此事件的原始原始X坐标。对于屏幕上的触摸事件,在调整包含窗口和视图之前,这是事件在屏幕上的原始位置。 (来源:https://developer.android.com/reference/android/view/MotionEvent.html#getRawX())
这就是为什么getRawX()
和getRawY()
似乎将图片放在比你点击的位置更低的原因。
您应该只使用MotionEvent上的getX()
和getY()
方法。
至于你的图像走出RelativeLayout,这将取决于两件事:
将您的图片添加到RelativeLayout(不确定您的实际addView(img);
是做什么)
确保您的RelativeLayout没有启用https://developer.android.com/reference/android/view/ViewGroup.html#setClipChildren(boolean)
这将确保您的图片属于RelativeLayout容器,并且在移出图像时不会被绘制。