枪王编程方式的WebView [英] Double Tap Programmatically On WebView

查看:128
本文介绍了枪王编程方式的WebView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一个单一的web视图显示不同的HTML内容基于一个通用的活动。

每个HTML内容meta标签是这样的。

 < META NAME =视口CONTENT =WIDTH =设备的宽度,高度=设备的高度,最小规模为0.4,最大规模= 3,初始规模= 0.5>

和编程的WebView配置,以适应这些$ C $屏幕内容CS。

 的WebView web视图=(的WebView)findViewById(R.id.webview1);
        webView.getSettings()setJavaScriptEnabled(真)。
        。webView.getSettings()setLoadWithOverviewMode(真);
        。webView.getSettings()setUseWideViewPort(真);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(真);
        。webView.getSettings()setBuiltInZoomControls(真);
        。webView.getSettings()setLoadsImagesAutomatically(真);
        webView.getSettings()setLightTouchEnabled(真)。
        webView.getSettings()setDomStorageEnabled(真)。        webView.setBackgroundColor(0);

不幸的是既不元code和的WebView配置不会在屏幕上不适合的内容;但双攻适合的内容非常好。所以我不知道我可以可模拟双编程敲击的WebView?


解决方案

  / **
 *
 * /
包com.y2cf.hoppr.utils.viewutils;进口android.content.Context;
进口android.os.SystemClock;
进口android.util.AttributeSet;
进口android.util.Log;
进口android.view.GestureDetector;
进口android.view.MotionEvent;
进口android.webkit.WebView;/ **
 * @author拉杰什
 *
 * /
公共类MyWebView扩展的WebView {
    私人GestureDetector gestureDetector;    / **
     * @参数方面
     * /
    公共MyWebView(上下文的背景下){
        超级(上下文);
        gestureDetector =新GestureDetector(上下文,新GestureListener());
        // TODO自动生成构造函数存根
    }    / **
     * @参数方面
     * @参数ATTRS
     * /
    公共MyWebView(上下文的背景下,ATTRS的AttributeSet){
        超(背景下,ATTRS);
        gestureDetector =新GestureDetector(上下文,新GestureListener());
        // TODO自动生成构造函数存根
    }    / **
     * @参数方面
     * @参数ATTRS
     * @参数defStyle
     * /
    公共MyWebView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
        超(背景下,ATTRS,defStyle);
        gestureDetector =新GestureDetector(上下文,新GestureListener());
        // TODO自动生成构造函数存根
    }
    公共无效simulateDoubleTap()
    {        simulateDoubleTapEvent(0);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(1);
        simulateDoubleTapEvent(0);
    }    私人无效simulateDoubleTapEvent(INT行动)
    {
        长时间的停机= SystemClock.uptimeMillis();
        长EVENTTIME = SystemClock.uptimeMillis()+ 100;
        浮动X = 0.0;
        浮Y = 0.0;
        //元状态列表在这里找到:developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
        INT亚状态= 0;
        MotionEvent我= MotionEvent.obtain(
            停机时间,
            EVENTTIME,
            行动,
            X,
            Y,
            亚状态
        );
        dispatchTouchEvent(箱);
    }    @覆盖
    公共布尔onTouchEvent(MotionEvent事件){
        // TODO自动生成方法存根
        返回gestureDetector.onTouchEvent(事件);
    }    私有类GestureListener扩展GestureDetector.SimpleOnGestureListener {        @覆盖
        公共布尔onDown(MotionEvent五){
            返回true;
        }
        //事件时双击出现
        @覆盖
        公共布尔onDoubleTap(MotionEvent五){
            浮X = e.getX();
            浮Y = e.getY();            Log.d(枪王,在螺纹:(+ X +,+ Y +));            返回true;
        }
    }}

创建一个这样的类并调用simulateDoubleTap()基准值确定方法。希望这将帮助,和你的WebView应该是这个类的一个实例。

I have a generic activity that contains a single webview to show different html based content.

Every html content has meta tag like this.

<meta name="viewport" content="width=device-width,height=device-height, minimum-scale=0.4, maximum-scale=3,initial-scale=0.5"> 

And WebView programmatically configured to fit content in screen with these codes.

WebView webView = (WebView) findViewById(R.id.webview1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);        
        webView.getSettings().setUseWideViewPort(true);     
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);    
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setLightTouchEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);

        webView.setBackgroundColor(0);

Unfortunately neither meta code nor webview configurations doesn't fit content in screen; but double tapping fits content excellent. So i wonder can i simulate double tapping on webview programmatically?

解决方案

/**
 * 
 */
package com.y2cf.hoppr.utils.viewutils;

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;

/**
 * @author rajesh
 *
 */
public class MyWebView extends WebView {


    private GestureDetector gestureDetector;

    /**
     * @param context
     */
    public MyWebView(Context context) {
        super(context);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }

    /**
     * @param context
     * @param attrs
     */
    public MyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }

    /**
     * @param context
     * @param attrs
     * @param defStyle
     */
    public MyWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }


    public void simulateDoubleTap()
    {

        simulateDoubleTapEvent(0);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(1);
        simulateDoubleTapEvent(0);
    }

    private void simulateDoubleTapEvent(int action)
    {
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis() + 100;
        float x = 0.0f;
        float y = 0.0f;
        // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
        int metaState = 0;
        MotionEvent me = MotionEvent.obtain(
            downTime, 
            eventTime, 
            action, 
            x, 
            y, 
            metaState
        );
        dispatchTouchEvent(me);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return gestureDetector.onTouchEvent(event);
    }

    private class GestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
        // event when double tap occurs
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            float x = e.getX();
            float y = e.getY();

            Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")");

            return true;
        }
    }

}

Create a class like this and call simulateDoubleTap() methord. Hope this will help, and your webview should be an instance of this class.

这篇关于枪王编程方式的WebView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆