Android在web view中监听屏幕双击的两种方式onCl

2020-02-24  本文已影响0人  刘白超

1.onclick方法
缺点:不能在web view打开的网页中监听

//MainActivity.java页面
package com.example.aaa;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;

import com.example.aaa.MainActivity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
import android.view.LayoutInflater;
import android.widget.LinearLayout;

public class MainActivity extends ActionBarActivity {
   
   private boolean waitDouble = true;
   private static final int DOUBLE_CLICK_TIME = 350;
   
   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.activity_main);
      //TextView hello = (TextView)findViewById(R.id.q);
      LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
      LinearLayout hello = (LinearLayout)findViewById(R.id.q);
      //LinearLayout hello = (LinearLayout)findViewById(R.id.q);
      hello.setOnClickListener(listener);
      
   }
   OnClickListener listener = new OnClickListener(){
 
      @Override
      public void onClick(View v) {
         // TODO Auto-generated method stub
         if(waitDouble == true){
            waitDouble = false;
            Thread thread = new Thread(){
               @Override
               public void run(){
                  try {
                     sleep(DOUBLE_CLICK_TIME);
                     if(waitDouble == false){
                        waitDouble = true;
                        singleClick();
                     }
                  } catch (InterruptedException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                  }
               }
            };
            thread.start();
         }else{
            waitDouble = true;
            doubleClick();
         }
         
         
      }
      
   };
   
   private void singleClick(){
      System.out.println("single");
   }
   
   private void doubleClick(){
       Toast.mak``
Text(MainActivity.this, "双击", Toast.LENGTH_LONG)
       .show();
   }
}
//activity_main.xml页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/q"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/c"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="hello" />

</LinearLayout>

源码下载:http://download.csdn.net/download/qq_25252769/9958627

2.onTouch方法
可以在web view打开的页面使用双击事件

//MainActivity.java页面
package com.example.full;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.example.full.R;
import com.example.full.MainActivity;
import android.app.Activity;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Toast;
import android.view.LayoutInflater;
import android.widget.LinearLayout;         
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.Window;
import android.view.MotionEvent;

public class MainActivity extends ActionBarActivity{ 
    
    private boolean waitDouble = true;
    private static final int DOUBLE_CLICK_TIME = 350;
    private final int DOUBLE_TAP_TIMEOUT = 200;  
    private MotionEvent mCurrentDownEvent;  
    private MotionEvent mPreviousUpEvent;
    
    public void onCreate(Bundle savedInstanceState){ 
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
 
      //外部网页
        init();
        
        //TextView hello = (TextView)findViewById(R.id.q);
        //LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
        //LinearLayout hello = (LinearLayout)findViewById(R.id.q);
        //LinearLayout hello = (LinearLayout)findViewById(R.id.q);
        //WebView hello = (WebView)findViewById(R.id.webView);
        webView = (WebView) findViewById(R.id.webView);
        webView.setOnTouchListener(listener);
      }
    
     OnTouchListener listener = new OnTouchListener(){
         
        @Override
        public boolean onTouch(View v,MotionEvent event) {
           // TODO Auto-generated method stub
           /*if(waitDouble == true){
              waitDouble = false;
              Thread thread = new Thread(){
                 @Override
                 public void run(){
                    try {
                       sleep(DOUBLE_CLICK_TIME);
                       if(waitDouble == false){
                          waitDouble = true;
                          singleClick();
                       }
                    } catch (InterruptedException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                    }
                 }
              };
              thread.start();
           }else{
              waitDouble = true;
              doubleClick();
           }*/
            if (event.getAction() == MotionEvent.ACTION_DOWN) {  
                            if (mPreviousUpEvent != null  
                                    && mCurrentDownEvent != null  
                                    && isConsideredDoubleTap(mCurrentDownEvent,  
                                            mPreviousUpEvent, event)) {  
                                Toast.makeText(MainActivity.this, "双击", Toast.LENGTH_LONG).show();  
                            }  
                            mCurrentDownEvent = MotionEvent.obtain(event);  
                        } else if (event.getAction() == MotionEvent.ACTION_UP) {  
                            mPreviousUpEvent = MotionEvent.obtain(event);  
                        }
           return false;
           
        }
        
     };
     
     private boolean isConsideredDoubleTap(MotionEvent firstDown,  
                     MotionEvent firstUp, MotionEvent secondDown) {  
                 if (secondDown.getEventTime() - firstUp.getEventTime() > DOUBLE_TAP_TIMEOUT) {  
                     return false;  
                 }  
                 int deltaX = (int) firstUp.getX() - (int) secondDown.getX();  
                 int deltaY = (int) firstUp.getY() - (int) secondDown.getY();  
                 return deltaX * deltaX + deltaY * deltaY < 10000;  
             }  
     private void singleClick(){
         Toast.makeText(MainActivity.this, "单击", Toast.LENGTH_LONG)
         .show();
     }
     
     private void doubleClick(){
       Toast.makeText(MainActivity.this, "双击", Toast.LENGTH_LONG).show();
     }
    
    
 private WebView webView;

    
    private void init(){
        webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setBuiltInZoomControls(true);
        //WebView加载web资源
       webView.loadUrl("http://baidu.com");
        //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
       webView.setWebViewClient(new WebViewClient(){
           @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
               //返`
值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
             view.loadUrl(url);
            return true;
        }
       });
    }
 
} 
//activity_main.xml页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:fadingEdgeLength="0sp" 
    android:id="@+id/q"
    >
 
    <LinearLayout
        android:id="@+id/myTitleBarLayout"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        > 
 
        <TextView 
            android:id="@+id/myTitleBarTextView" 
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content" 
            android:text="@string/app_name" 
            android:paddingTop="4dip" 
            android:paddingBottom="4dip" 
            android:paddingLeft="6dip" 
            android:textStyle="bold" 
            android:shadowColor="#BB000000" 
            android:shadowRadius="3.0" 
            android:shadowDy=".25" 
 
        /> 
 
        <View 
            android:layout_width="fill_parent" 
            android:layout_height="1dip" 
            android:background="#CCEEEEEE" 
            android:padding="10dip" 
        /> 
    </LinearLayout> 
 
    <!-- <ScrollView 
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" 
        android:layout_weight="1" 
        > 
 
        Insert your regular layout stuff here 
 
        <Button android:id="@+id/toggle_title_button"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content" 
            android:text="Toggle Title"  
        /> 
    </ScrollView> --> 
     <WebView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/webView"
    />
</LinearLayout> 

源码下载:http://download.csdn.net/download/qq_25252769/9958637

上一篇下一篇

猜你喜欢

热点阅读