如何在 SurfaceView 中拖动自定义视图。触摸事件不会从 SurfaceView 分派到子自定义视图,或者不会调用子视图的 onTouchEvent。
问问题
648 次
1 回答
1
试试这个代码
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));
于 2018-11-15T09:11:41.437 回答