如何在SurfaceView中调用自定义视图的拖动事件? [英] How to invoke drag event of a custom view inside SurfaceView?
本文介绍了如何在SurfaceView中调用自定义视图的拖动事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在SurfaceView中拖动自定义视图。触摸事件不会从SurfaceView调度到子自定义视图,或者不会调用子视图的onTouchEvent。
How can i drag a custom view inside the SurfaceView. Touch events are not dispatched to child custom view from SurfaceView or child view's onTouchEvent is not called.
推荐答案
尝试此代码
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中调用自定义视图的拖动事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文