单击webview android中的图像时触发动作?

时间:2014-09-25 11:34:14

标签: android android-webview ontouchlistener

我有一个webview,显示一些html数据,其中包含一些图像和超链接everthing工作正常,当我点击webview中的图像它应该开始一个activity.i找到一种方法来检测图像使用

的网页视图
  

WebView.HitTestResult

通过使用这个我可以检测网页视图中的图像,我把它放在ontouchLisner我得到了图像的检测问题是当我滚动网页视图,如果我不小心移动手指穿过图像活动将启动它是由于ontouchLisner有任何方法来解决这个问题,活动应该只在我点击网页视图中的图像时触发。

我在代码中使用的on touchlisner

    wv.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            // TODO Auto-generated method stub
            WebView.HitTestResult hr = ((WebView) arg0).getHitTestResult();

            switch (arg1.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:

                break;

            case MotionEvent.ACTION_UP:


                    if (hr.getType() == 5 || hr.getType() == 8) {
                        //Detect image in webview
                        startActivity(new
                         Intent(MainActivity.this,Other.class));



                }
                break;

            case MotionEvent.ACTION_POINTER_DOWN:
                Log.d("-------", "clcik.den");

            case MotionEvent.ACTION_POINTER_UP:
                Log.d("-------", "clcik.up");
                break;

            case MotionEvent.ACTION_MOVE:

                Log.d("-------", "clcik.movee"+hr.getType());
                break;
            }

            return false;
        }
    });

1 个答案:

答案 0 :(得分:1)

当您在Webview中单击图像时,需要打开上下文菜单。 为此,创建一个自定义webview并覆盖其onCreateContextMenu方法。因此,无论何时触摸图像,它都会打开一个菜单项,然后在该点击上实现您的逻辑。 使用此代码可能会对您有所帮助:

    public class CustomWebview extends WebView {
    public static final int ID_DO_SOMETHING = 1;


    private Context ctx;
    public CustomWebview(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.ctx = context; 
    }

    public CustomWebview(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        this.ctx = context;

    }

    public CustomWebview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        this.ctx = context;

    }

    @Override
    protected void onCreateContextMenu(ContextMenu menu) {
        super.onCreateContextMenu(menu);
        final HitTestResult result = getHitTestResult();
        MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                // do the menu action
                switch (item.getItemId()) {
                case ID_DO_SOMETHING:

                    // implement your logic here;

                    break;

                default:
                    break;
                }
                return true;
            }
        };

        if (result.getType() == HitTestResult.IMAGE_TYPE
                || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
            // Menu options for an image.
            // set the header title to the image url
            menu.setHeaderTitle(result.getExtra());
            menu.add(0, ID_DO_SOMETHING, 0, "Your Method Name").setOnMenuItemClickListener(handler);

        }

    }

}