Androidの解决ViewFlipper与ScrollView滑动响应事件拦截的问题

来源:互联网 发布:crm软件系统发展 编辑:程序博客网 时间:2024/05/21 06:36

        Androidの解决ViewFlipper与ScrollView滑动响应事件拦截的问题

1. 使用ViewFlipper作为水平滑动容器;需要使用ScrollView作为垂直滑动容器。
   Android ViewFlipper添加ScrollView后不能滑动了原因是因为activity没有处理滑动效果。 网上都说是 重写
 public boolean dispatchTouchEvent(MotionEvent ev) {                // TODO Auto-generated method stub                super.dispatchTouchEvent(ev);                return gestureDetector.onTouchEvent(ev);     }
 其实该方法要在 scrollview中实现,具体看下面。。不是写在Activity中
 
  这里是主newslist_contentactivity_viewflipper.xml内容了
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#EDE4D6"    android:orientation="vertical" >   <ViewFlipper        android:id="@+id/viewflipper"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:clickable="true"        android:layout_below="@id/linearLayout1">   </ViewFlipper></RelativeLayout>
但是我又添加了另一个xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#EDE4D6"    android:orientation="vertical" >   <com.blueberry.xinli.widget.FriendlyScrollView        android:id="@+id/yilincontent_scroll"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scrollbars="none" >             <RelativeLayout                android:id="@+id/layout_title_textview"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:layout_marginLeft="13dip"                android:layout_marginTop="20dip"                android:orientation="vertical" >                <TextView                    android:id="@+id/ntitle_textview"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_marginTop="5dip"                    android:text="@string/yilin_top_left_text"                    android:textColor="#ffdc6a86"                    android:textSize="25sp" />                <!-- android:layout_centerHorizontal="true" -->                <TextView                    android:id="@+id/nfrom_textview"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_below="@id/ntitle_textview"                    android:layout_marginTop="8dip"                    android:text="@string/yilin_top_left_text"                    android:textColor="@color/main_news_item_title"                    android:textSize="18sp" />            </RelativeLayout>     </com.blueberry.xinli.widget.FriendlyScrollView> </RelativeLayout>
这里我自定义的一个 scrollview 了。。。

需要实现一个自定义的scrollview类了
public class FriendlyScrollView extends ScrollView {      GestureDetector gestureDetector;      public FriendlyScrollView(Context context) {          super(context);          gestureDetector = gestureDetector;     }         public FriendlyScrollView(Context context, AttributeSet attrs) {          super(context, attrs);      }         public FriendlyScrollView(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);      }         public void setGestureDetector(GestureDetector gestureDetector) {          this.gestureDetector = gestureDetector;      }         @Override      public boolean onTouchEvent(MotionEvent event) {          super.onTouchEvent(event);          return gestureDetector.onTouchEvent(event);      }         @Override      public boolean dispatchTouchEvent(MotionEvent ev){          gestureDetector.onTouchEvent(ev);          super.dispatchTouchEvent(ev);          return true;      }   }  

由于ViewFlipper在外,ScrollView在内,因此一般的做法是定义一个手势响应类来处理响应事件,并将响应事件的处理交给内层的ScrollView。
yilincontent_scroll = (FriendlyScrollView)v.findViewById(R.id.yilincontent_scroll);yilincontent_scroll.setOnTouchListener(new listener());yilincontent_scroll.setGestureDetector(gestureDetector);

记得在这里添加yilincontent_scroll.setGestureDetector(gestureDetector); 否则会有空指针异常的。。
一下就是如何在Activity中实现手势左右滑动了,要去实现了,这里不做具体内容了。

解决问题关键地点:
自定义一个scrollview,, 重写那个dispatchTouchEvent 方法即可。。


2 .源码下载
下载地址
0 0
原创粉丝点击