ViewFlipper中放入两个ListView不能拖动的情况
来源:互联网 发布:许昌长葛淘宝招聘网 编辑:程序博客网 时间:2024/05/27 20:26
ViewFlipper可以帮助我们实现换屏的功能,如果我们在ViewFlipper中放入GridView或者ListView我们发现就无法实现了换屏操作,这个主要是因为GridView的onTouchEvent将事件全部拦截了,所以我们在ViewFlipper中无法监听到onTouchEvent,所以我们要根据用户的手势来判断是否要在ViewFlipper中去拦截onTouchEvent。拦截onTouchEvent的事件很简单就是在ViewFlipper的onInterrceptTouchEvent中返回true这样下面的事件都会经过ViewFlipper中onTouchEvent。
<?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" > <com.xqq.view.MyViewFlipper android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/fipper"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.xqq.view.MyGridView android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ff2341" android:id="@+id/gv1" ></com.xqq.view.MyGridView> </FrameLayout> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.xqq.view.MyGridView android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#cf2342" android:id="@+id/gv2"></com.xqq.view.MyGridView> </FrameLayout> </com.xqq.view.MyViewFlipper> </LinearLayout>
MyViewFlipper.java
import com.xqq.DragActivity.GestureListenerAdapter;import com.xqq.DragActivity.R;import com.xqq.DragActivity.R.anim;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.GestureDetector;import android.view.MotionEvent;import android.widget.ViewFlipper;public class MyViewFlipper extends ViewFlipper { private static final String TAG="MyViewFlipper";private static final float SCROLL_CRISIS=1f; //滑动的临界正选值private static final int TOUCH_STATE_REST=0; //滑动重置private static final int TOUCH_STATE_SCROLLING=1; //正在滑动中private int mLastX; private int mLastY;private int mFirstX,mFirstY;private int mTouchState=TOUCH_STATE_REST; //滑动的状态private boolean mIsFirst=false;private GestureDetector mGestureDetector;public MyViewFlipper(Context context, AttributeSet attrs) {super(context, attrs);mGestureDetector=new GestureDetector(new MyGestureListener());}public MyViewFlipper(Context context) {super(context);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {/*if(ev.getAction()==MotionEvent.ACTION_MOVE && (mTouchState!=TOUCH_STATE_REST)){return true;}*/switch(ev.getAction()){case MotionEvent.ACTION_MOVE:Log.d(TAG, "xqq_move1");float distanceX=Math.abs((int)ev.getX()-mLastX);float distanceY=Math.abs((int)ev.getY()-mLastY);if(distanceY/distanceX<SCROLL_CRISIS){Log.d(TAG, "xqq_move2");mTouchState=TOUCH_STATE_SCROLLING;}break;case MotionEvent.ACTION_DOWN:mLastX=(int) ev.getX();mLastY=(int) ev.getY();mTouchState=TOUCH_STATE_REST;Log.d(TAG, "onInterceptTouchEvent_actiondown_x="+ev.getX());mFirstX=(int) ev.getX();mFirstY=(int) ev.getY();break;case MotionEvent.ACTION_UP:mTouchState=TOUCH_STATE_REST;break;}Log.d(TAG, "xqq_isTrue="+(mTouchState!=TOUCH_STATE_REST));return mTouchState!=TOUCH_STATE_REST;}private class MyGestureListener extends GestureListenerAdapter{@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { if(e2.getX()>mFirstX){ Log.d(TAG, "showPervious()"); setInAnimation(getContext(),R.anim.slide_in_right); setOutAnimation(getContext(),R.anim.slide_out_left); showPrevious(); }else if(mFirstX>e2.getX()){ setInAnimation(getContext(),R.anim.slide_in_left); setOutAnimation(getContext(),R.anim.slide_out_right); Log.d(TAG, "showNext()"); showNext(); }return true;}}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch(event.getAction()){case MotionEvent.ACTION_DOWN:Log.d(TAG, "xqq_ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "onTouchEvent_move_e.x="+event.getX());break;} return mGestureDetector.onTouchEvent(event);}}
FlipperActivity.java
import com.xqq.view.MyGridView;import com.xqq.view.MyViewFlipper;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.GestureDetector;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.TextView;import android.widget.ViewFlipper;public class FlipperActivity extends Activity{private static final String TAG="FlipperActivity";private MyViewFlipper mViewFlipper;private String [] listStr1={"中国","日本","韩国","美国","加拿大"};private String [] listStr2={"北京","上海","江苏","浙江","山东"};private MyGridView mGridView1;private MyGridView mGridView2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_fillper); mViewFlipper=(MyViewFlipper)findViewById(R.id.fipper); mGridView1=(MyGridView) findViewById(R.id.gv1); mGridView2=(MyGridView) findViewById(R.id.gv2); MyAdapter adapter1=new MyAdapter(listStr1); MyAdapter adapter2=new MyAdapter(listStr2); mGridView1.setAdapter(adapter1); mGridView2.setAdapter(adapter2); } private class MyAdapter extends BaseAdapter{ class Holder{ TextView tvBookName; } private String [] list; public MyAdapter(String[] list) {super();this.list = list;}@Overridepublic int getCount() {return list.length;}@Overridepublic Object getItem(int position) {return list[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Holder holder=null;if(convertView==null){convertView=LayoutInflater.from(FlipperActivity.this).inflate(R.layout.gridview_item, null);holder=new Holder();holder.tvBookName=(TextView) convertView.findViewById(R.id.tv_bookName);convertView.setTag(holder);}else{ holder=(Holder) convertView.getTag();}holder.tvBookName.setText(list[position]);return convertView;} } }
- ViewFlipper中放入两个ListView不能拖动的情况
- listview解决拖动背景变黑的情况
- listview解决拖动背景变黑的情况
- ListView不可放入ScrollView中
- Vector的size()不能放入判断语句中
- DataRow放入ViewState中不能序列化的问题
- Android中ListView组件的Item拖动
- Android中ListView放入PopupWindow产生问题解决
- 可拖动的listview
- ORACLE11G中大表不能放入KEEP池中
- QML中鼠标拖动移动ListView中项的位置
- android中ListView滑动变黑的情况
- c++中不能区分重载的情况
- ListView 中不通过header拖动
- android中ListView拖动时背景黑色的问题
- Android中ScrollView导致listView无法拖动的问题
- android中ListView拖动时背景黑色的问题
- android中ListView拖动时背景黑色的问题
- JSP内置对象----config
- 《战争风云》
- Oracle常用监控SQL
- 如何评估机器网络吞吐能力
- 清理了一下touch
- ViewFlipper中放入两个ListView不能拖动的情况
- android语音识别技术
- Java集合框架的知识总结
- JSP内置对象----exception
- MySQL 数据类型
- 编译程序的使用
- html:歌曲在新打开的页面中继续播放演示
- c++学习笔记
- 好玩的窗口 基本版