【问题标题】:How to find touch event when finger is swiped over an ImageView当手指在 ImageView 上滑动时如何找到触摸事件
【发布时间】:2013-12-31 19:49:22
【问题描述】:

当手指在图像上滑动时如何查找触摸事件。

相对布局包含多个图像视图。它们是随机放置的。当我在屏幕上滑动手指时,我想捕捉用户手指交叉的图像视图。

我能够捕获相对布局触摸事件请建议一些方法来捕获图像视图 在相对布局的滑动动作中触摸。

附加图像布局以便更好地理解。

代码:

public class MainActivity extends Activity {

    ImageView imageView;
    Rect imageViewArea;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView) findViewById(R.id.imageView);
        imageViewArea = new Rect();
        //imageView.getGlobalVisibleRect(imageViewArea);


        //not working
        imageView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                return false;
            }
        });
    }

    //working
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getActionMasked())
        {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_MOVE:
            Log.i("log", "ACTION_MOVE");

            int x = (int) event.getX();
            int y = (int) event.getY();

            //not working 
            if(imageViewArea.contains(x, y)) {
                Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_LONG).show();
            }

            break;
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
        }
        return super.onTouchEvent(event);
    }

【问题讨论】:

  • 无论你做了什么,请发布你的代码

标签: android


【解决方案1】:

此示例代码可能会对您有所帮助...

    final RelativeLayout layout  =(RelativeLayout) findViewById(R.id.detailsView);
    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    final Rect imageViewArea = new Rect();
    imageView.getGlobalVisibleRect(imageViewArea);
    layout.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int x = (int) event.getX();
            int y = (int) event.getY();
            if(imageViewArea.contains(x, y)) {
                // swipe is passing over ImageView....
            }
            return true;
        }
    });

编辑:

private ImageView imageView;
private Rect imageRect;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = (ImageView) findViewById(R.id.imageView1);
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    if (imageRect == null) {
        imageRect = new Rect();
        imageView.getGlobalVisibleRect(imageRect);
    }
    int x = (int) event.getX();
    int y = (int) event.getY();
    if (imageRect.contains(x, y)) {
        Log.i(TAG, "touch passing over imageView");
    }
    return true;
}

【讨论】:

  • ImageView 类型的方法 contains(int, int) 未定义
  • not working if(imageViewArea.contains(x, y)) { // 滑动正在通过 ImageView.... }
  • @Kanaiya 查看我编辑的代码...在 OnTouchEvent 中返回 true
  • @Kanaiya 删除 ImageView 的 OnTouchListener。如果仍然存在问题,请告诉我...
  • 是的,它的工作原理你能告诉我我的代码有什么问题,什么是对的吗?
【解决方案2】:

OnTouchListener 设置为图像或使用重写的onTouch 方法创建自己的ImageView 类

【讨论】:

  • 也许可以在 relativeLayout 上创建透明覆盖,并使用捕获所有触摸事件的图像,然后检查是否滑动是否在 imageView 上
  • 我认为你的布局应该是这样的: relativeLayout imageViews(multiple) TransparentView TransparentView 捕捉所有的触摸事件,并把它交给相对布局。比 RelativeLayout 检查(子)ImageView 是否被触摸,然后将触摸发送到 imageView
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多