Android 如何在SurfaceView中调用自定义视图的拖动事件?
如何在SurfaceView中拖动自定义视图。触摸事件未从SurfaceView发送到子自定义视图,或者未调用子视图的onTouchEvent。请尝试此代码Android 如何在SurfaceView中调用自定义视图的拖动事件?,android,android-canvas,surfaceview,android-custom-view,android-touch-event,Android,Android Canvas,Surfaceview,Android Custom View,Android Touch Event,如何在SurfaceView中拖动自定义视图。触摸事件未从SurfaceView发送到子自定义视图,或者未调用子视图的onTouchEvent。请尝试此代码 public class MoveViewTouchListener implements View.OnTouchListener { private GestureDetector mGestureDetector; private View mView; public MoveViewTouchListe
public class MoveViewTouchListener implements View.OnTouchListener
{
private GestureDetector mGestureDetector;
private View mView;
public MoveViewTouchListener(View view)
{
mGestureDetector = new GestureDetector(view.getContext(), mGestureListener);
mView = view;
}
@Override
public boolean onTouch(View v, MotionEvent event)
{
return mGestureDetector.onTouchEvent(event);
}
private GestureDetector.OnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener()
{
private float mMotionDownX, mMotionDownY;
@Override
public boolean onDown(MotionEvent e)
{
mMotionDownX = e.getRawX() - mView.getTranslationX();
mMotionDownY = e.getRawY() - mView.getTranslationY();
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
mView.setTranslationX(e2.getRawX() - mMotionDownX);
mView.setTranslationY(e2.getRawY() - mMotionDownY);
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (g) {
if (groupselecteditems.contains(mView)) {
mView.setBackgroundColor(Color.TRANSPARENT);
groupselecteditems.remove(mView);
} else {
mView.setBackgroundResource(border);
groupselecteditems.add((MyTextView) mView);
}
} else {
toucheditem = mView;
xcountry = mView.getX();
ycountry = mView.getY();
}
return true;
}
@Override
public void onLongPress(MotionEvent e) {
if (g) {
if (groupselecteditems.size() > 0) {
editGroup();
}
} else {
changtextfeatures((TextView) mView);
}
}
};
}
使用您的视图调用此类
view.setOnTouchListener(new MoveViewTouchListener(view));
SurfaceView不是视图组,因此无法保存任何子视图。只能在曲面视图的画布上绘制对象。例如,您可以在触摸屏x、y上绘制一个矩形。是的,您是对的。我有一个视图,我正在使用它的画布绘制到SurfaceView上方的屏幕上。但此视图(带边框的白色圆圈)未接收任何事件。触摸或拖动事件都不会传播到此自定义视图。我想在触摸此视图时将其拖动。如何实现这一点?我在自定义SurfaceView类中拥有视图。如果我从SurfaceView的
公共布尔dispatchTouchEvent(MotionEvent event){dragCircle.dispatchTouchEvent(event);return true;}
DragCircleView实例获取事件,但它在触摸SurfaceView的任何位置都得到,我尝试将event.getX和getY与圆形视图的x和y匹配,但它不起作用。请保留引号块(由
标记触发的黄色矩形)用于实际引用的内容。引用是指某人或其他人所说的话,例如在演讲、手册摘录等中。请使用普通段落文本。