简体   繁体   English

查看Pager Android筛选器触摸事件

[英]View Pager Android Filter Touch Events

I am using a view pager to create a picture gallery. 我正在使用视图寻呼机创建图片库。 I currently have a custom ImageView that allows a user to pinch and zoom and pan. 我目前有一个自定义ImageView,它允许用户捏和缩放和平移。 The problem I have is how do I differentiate between a pinch to zoom/pan and a switching of a page in the view pager. 我的问题是如何区分视图缩放器中的缩放/平移和页面切换。

I tried to use onInterceptTouchEvent for the view pager, but this method only captures a single point touch event of action down. 我尝试将onInterceptTouchEvent用于视图寻呼机,但是此方法仅捕获向下动作的单点触摸事件。 So it is impossible to differentiate a down touch with two fingers going down for a pinch to zoom. 因此,不可能用两根手指向下按下以放大缩放来区分向下触摸。

I tried implementing a touch listener on the View Pager, but get a series of errors. 我尝试在View Pager上实现触摸侦听器,但遇到了一系列错误。 Below is the code followed by the errors. 下面是错误后面的代码。

viewPager.setOnTouchListener(new OnTouchListener() { viewPager.setOnTouchListener(new OnTouchListener(){

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("Action", "Action-Touch List "+Integer.toString(getAction(event.getAction())));
        int action = getAction(event.getAction());
        View vv =(View) viewPager.getChildAt(0);
        ImageZoomView izv= (ImageZoomView) vv.findViewById(R.id.ViewImagePreview);


        if (Float.compare(izv.getZoomState().getPanX(), 0.5f) == 0
                && Float.compare(izv.getZoomState().getPanY(), 0.5f) == 0
                && Float.compare(izv.getZoomState().getZoom(), 1.0f) == 0
                && action != ACTION_MULTITOUCH_DOWN
                && action != ACTION_MULTITOUCH_UP) {

            **Error Here**viewPager.onTouchEvent(event);
            return true;
        } else {

            izv.onTouchEvent(event);
            return true;

        }

    }
});

getaction works correctly for multiple touches, etc. getaction可以正确地用于多个触摸等。

04-28 12:03:57.365: E/AndroidRuntime(6662): FATAL EXCEPTION: main
04-28 12:03:57.365: E/AndroidRuntime(6662): java.lang.ArrayIndexOutOfBoundsException
04-28 12:03:57.365: E/AndroidRuntime(6662):     at android.view.MotionEvent.getX(MotionEvent.java:907)
04-28 12:03:57.365: E/AndroidRuntime(6662):     at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
04-28 12:03:57.365: E/AndroidRuntime(6662):     at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:86)
04-28 12:03:57.365: E/AndroidRuntime(6662):     at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:210)
04-28 12:03:57.365: E/AndroidRuntime(6662):     at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:1771)
04-28 12:03:57.365: E/AndroidRuntime(6662):     at com.**See Double asterisk in above code)

Any help would be appreciated. 任何帮助,将不胜感激。

It looks like the error was because I had min version 3 in the Manifest accidentally instead of 4 or later. 看来错误是因为我不小心在清单中安装了最低版本3,而不是4或更高版本。 I am still trying to get a smooth touch enabled gallery working. 我仍在尝试使启用了平滑触摸的图库正常工作。

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM