您的位置:首页 > 移动开发 > Android开发

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

2015-04-26 20:45 489 查看

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 .源码下载
下载地址

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐