package com.duguang.baseanimation.ui.customview.gallerylistview; import java.util.ArrayList; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.TextView; import com.duguang.baseanimation.R; public class GalleryItem extends Gallery { private float mLastMotionX;// 滑动过程中,x方向的初始坐标 private float mLastMotionY;// 滑动过程中,y方向的初始坐标 private int mTouchSlop;// 手指大小的距离 public ArrayList<String> arraylist; public ImageAdapter adapter; public GalleryItem(Context context) { super(context); final ViewConfiguration configuration = ViewConfiguration .get(getContext()); mTouchSlop = configuration.getScaledTouchSlop(); this.setStaticTransformationsEnabled(true); } public GalleryItem(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.setStaticTransformationsEnabled(true); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return super.onScroll(e1, e2, distanceX, distanceY); } public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction();// 获取触摸事件类型 final float x = ev.getX();// 每次触摸事件的x坐标 final float y = ev.getY();// 每次触摸事件的y坐标 switch (action) { case MotionEvent.ACTION_DOWN:// 按下事件 mLastMotionX = x;// 初始化每次触摸事件的x方向的初始坐标,即手指按下的x方向坐标 mLastMotionY = y;// 初始化每次触摸事件的y方向的初始坐标,即手指按下的y方向坐标 break; case MotionEvent.ACTION_MOVE: final int deltaX = (int) (mLastMotionX - x);// 每次滑动事件x方向坐标与触摸事件x方向初始坐标的距离 final int deltaY = (int) (mLastMotionY - y);// 每次滑动事件y方向坐标与触摸事件y方向初始坐标的距离 boolean xMoved = Math.abs(deltaX) > mTouchSlop && Math.abs(deltaY / deltaX) < 1; // 判断触摸事件处理的传递方向,该业务中是, // x方向的距离大于手指,并且y方向滑动的距离小于x方向的滑动距离时,Gallery消费掉此次触摸事件 // 如果需要,请在您的业务中,改变判断的逻辑 if (xMoved) {// Gallery需要消费掉此次触摸事件 return true;// 返回true就不会将此次触摸事件传递给子View了,我的业务中是ListView } break; case MotionEvent.ACTION_UP: if (this.getSelectedItemPosition() < 1) { this.setSelection(1); return true; } break; case MotionEvent.ACTION_OUTSIDE: break; case MotionEvent.ACTION_CANCEL: break; case MotionEvent.ACTION_MASK: break; } return false;// 将此次触摸事件传递给子View,即ListView } public void initAdapter(Context context, int[] item) { this.adapter = new ImageAdapter(context, item); } public class ImageAdapter extends BaseAdapter { private Context mContext; private int[] item; public ImageAdapter(Context context, int[] item) { this.mContext = context; this.item = item; } @Override public int getCount() { // TODO Auto-generated method stub return arraylist.size(); } @Override public Object getItem(int i) { // TODO Auto-generated method stub return i; } @Override public long getItemId(int i) { // TODO Auto-generated method stub return i; } @Override public View getView(int position, View view, ViewGroup viewgroup) { View retval = LayoutInflater.from(mContext).inflate( R.layout.activity_custom_gallery_listview_allvideo_item_horiitem, null); if (retval != null) { for (int i = 0; i < item.length; i++) { TextView title = (TextView) retval.findViewById(item[i]); title.setText(arraylist.get(position)); } } return retval; } } }