我刚刚覆盖了触摸事件
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.android.gms.internal.ev;
import com.google.android.gms.internal.ol;
import com.notifyme.R;
import com.notifyme.test.InteractiveScrollView;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AbsListView;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
public class TestActivity extends Activity {
ListView listView;
Map<Integer, List<Float>> map = new HashMap<Integer, List<Float>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_activity);
listView = (ListView) findViewById(R.id.lv_test);
MyAdapter adapter = new MyAdapter(this, R.layout.test_activity);
List<String> strings = new ArrayList<String>();
strings.add("http://youtube.com");
strings.add("https://google.com");
strings.add("http://www.tutorialspoint.com/");
strings.add("http://stackoverflow.com/");
adapter.addAll(strings);
listView.setAdapter(adapter);
}
private class MyAdapter extends ArrayAdapter<String> {
public MyAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
// TODO Auto-generated constructor stub
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
/*
* RelativeLayout relativeLayout = new RelativeLayout(getContext());
* RelativeLayout.LayoutParams params1 = new
* RelativeLayout.LayoutParams(
* RelativeLayout.LayoutParams.MATCH_PARENT,
* RelativeLayout.LayoutParams.WRAP_CONTENT); params1.height = 600;
* ScrollView scrollView = new ScrollView(getContext());
*/
/*
* scrollView.setLayoutParams(params1);
* relativeLayout.setOnTouchListener(new OnTouchListener() {
*
* @Override public boolean onTouch(View v, MotionEvent event) {
* Log.e("error","here");
* v.getParent().getParent().requestDisallowInterceptTouchEvent
* (true); return true; } });
*/
WebView w = new WebView(getContext());
AbsListView.LayoutParams params = new AbsListView.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.height = 600;
w.setLayoutParams(params);
w.setScrollContainer(false);
w.getSettings().setLoadsImagesAutomatically(true);
w.getSettings().setJavaScriptEnabled(true);
w.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
w.setWebViewClient(new WebViewClient());
w.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
});
w.loadUrl(getItem(position));
w.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("error",event.getEventTime()+"");
v.getParent()
.requestDisallowInterceptTouchEvent(true);
WebView scrollView =(WebView) v;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
map.put(position, new ArrayList<Float>());
map.get(position).add(0,event.getX());
map.get(position).add(1,event.getY());
break;
case MotionEvent.ACTION_MOVE:
float diff = (scrollView.getContentHeight()*scrollView.getScale()) - (scrollView.getScrollY()+600);
// Log.e("scrollView",scrollView.getContentHeight()*scrollView.getScale()+" ");
// Log.e("diff",diff+"v.getBottom()"+ v.getBottom()+"v.getHeight()"+v.getHeight()+"v.getScrollY() "+v.getScrollY());
if (diff <= 0 ) {
scrollView.scrollTo((int)event.getX(), (int)(scrollView.getContentHeight()*scrollView.getScale()-600));
v.getParent()
.requestDisallowInterceptTouchEvent(false);
//Log.e("TestActivity", "bottom");
return false;
}if(v.getScrollY() < 0 || v.getHeight() > scrollView.getContentHeight()){
scrollView.scrollTo((int)event.getX(), (int)0);
v.getParent()
.requestDisallowInterceptTouchEvent(false);
// Log.e("TestActivity", "top");
return false;
}
float oldX =0;
float oldY = 0;
if(map.containsKey(position)){
oldX = map.get(position).get(0);
oldY = map.get(position).get(1);
}
float diffX = oldX -event.getX();
float diffY = oldY - event.getY();
//Log.e("Scroll To", "oldX "+ oldX+"oldY "+oldY+"diffX "+diffX+"diffY "+diffY+"event.getX() "+event.getX()+"event.getY() "+event.getY());
scrollView.scrollBy((int)diffX, (int)diffY);
Log.e("error",event.getEventTime()+" = "+diffY);
map.get(position).clear();
map.get(position).add(0,event.getX());
map.get(position).add(1,event.getY());
break;
default:
break;
}
return true;
}
});
/*
* scrollView.addView(w); relativeLayout.addView(scrollView);
*/
return w;
// return super.getView(position, convertView, parent);
}
}
}
和 test_activity.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:orientation="vertical" >
<ListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>