android中无限循环滑动的gallery实例

1.点击图片有变暗的效果,使用imageview.setAlpha(),并且添加ontouchListener

 1 public void init() { 2         dots = new ImageView[len]; 3         for (int j = 0; j < len; j++) { 4             // 添加图片 5             final ImageView iv = new ImageView(this); 6             iv.setImageResource(res[j]); 7             views.add(iv); 8             iv.setOnTouchListener(new OnTouchListener() { 9 10                 @Override11                 public boolean onTouch(View v, MotionEvent event) {12                     if (event.getAction() == MotionEvent.ACTION_DOWN) {13                         iv.setAlpha(70);14                         slideHandler.removeCallbacks(slideRun);15                     }16                     return false;17                 }18             });19             // 添加索引20             ImageView imageView = new ImageView(this);21             imageView.setLayoutParams(new LayoutParams(15, 15));22             dots[j] = imageView;23             TextView tv = new TextView(this);24             tv.setText("  ");25             if (j == 0) {26                 // 默认进入程序后第一张图片被选中;27                 dots[j].setBackgroundResource(R.drawable.yst_i_pageon);28             } else {29                 dots[j].setBackgroundResource(R.drawable.yst_i_pageoff);30             }31 32             layout_point.addView(tv);33             layout_point.addView(imageView);34         }35         gallery.setAdapter(new ImageAdapter());36         gallery.setSelection((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2)37                 % len);38         gallery.setOnItemSelectedListener(selectListener);39         ((MyGallery) gallery).setViews(views);40         // TODO 定时滑动41         startSlide();42     }

2.无限滑动,自定义adapter,设置count为最大值,图片总数循环从0到图片的总长度

 1 public class ImageAdapter extends BaseAdapter { 2  3         public int getCount() { 4             if (views != null) { 5                 return Integer.MAX_VALUE; 6             } else { 7                 return 0; 8             } 9         }10 11         public Object getItem(int position) {12             if (position >= len) {13                 position = position % len;14             }15 16             return position;17         }18 19         public long getItemId(int position) {20             if (position >= len) {21                 position = position % len;22             }23             return position;24         }25 26         public View getView(int position, View convertView, ViewGroup parent) {27             View view = convertView;28             if (position >= len) {29                 position = position % len;30             }31             if (view == null) {32                 view = views.get(position);33             }34 35             return view;36         }37     }
View Code

3.自动滑动,自定义gallery,重写onFling方法,触摸时,停止滑动,弹起时继续滑动

 1 public class MyGallery extends Gallery { 2  3     private List<ImageView> views; 4     /** 左边 */ 5     public static final int LEFT = 0; 6     /** 右边 */ 7     public static final int RIGHT = 1; 8  9     public MyGallery(Context context) {10         super(context);11         // TODO Auto-generated constructor stub12     }13 14     public MyGallery(Context context, AttributeSet attrs, int defStyle) {15         super(context, attrs, defStyle);16         // TODO Auto-generated constructor stub17     }18 19     public MyGallery(Context context, AttributeSet attrs) {20         super(context, attrs);21         // TODO Auto-generated constructor stub22     }23 24     /** 设置视图 */25     public void setViews(List<ImageView> views) {26         this.views = views;27     }28 29     @Override30     public boolean onTouchEvent(MotionEvent event) {31         // TODO Auto-generated method stub32         if (event.getAction() == MotionEvent.ACTION_UP) {33             // 遍历views 设置alpha34             if (views != null && !views.isEmpty()) {35                 for (ImageView iv : views) {36                     iv.setAlpha(255);37                 }38             }39             Context context = this.getContext();40             if (context != null && context instanceof MainActivity) {41                    MainActivity main=(MainActivity) context;42                    main.startSlide();43             }44         }45         return super.onTouchEvent(event);46     }47 48     /** 滑动 direction=1向右,-1向左 */49     public void slide(int direction) {50         // MotionEvent e1 = MotionEvent.obtain(SystemClock.uptimeMillis(),51         // SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,52         // 89.333336f, 265.33334f, 0);53         // MotionEvent e2 = MotionEvent.obtain(SystemClock.uptimeMillis(),54         // SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 300.0f,55         // 238.00003f, 0);56         if (direction == this.RIGHT)57             this.onFling(null, null, -1200, 0);58         else {59             this.onFling(null, null, 1200, 0);60         }61     }62 }
View Code

下面贴出完整代码:
布局xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@android:color/background_light"    tools:context=".MainActivity" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:gravity="center"        android:orientation="vertical" >        <com.allen.gallery.MyGallery            android:id="@+id/mygallery"            android:layout_width="fill_parent"            android:layout_height="160dp"            android:fadingEdge="horizontal|vertical"            android:fadingEdgeLength="20dp" />        <LinearLayout            android:id="@+id/layout_dots"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:orientation="horizontal" >        </LinearLayout>    </LinearLayout></RelativeLayout>

2.完整的实现代码:

  1 package com.allen.gallery;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 import android.app.Activity;  7 import android.os.Bundle;  8 import android.os.Handler;  9 import android.view.MotionEvent; 10 import android.view.View; 11 import android.view.View.OnTouchListener; 12 import android.view.ViewGroup; 13 import android.view.ViewGroup.LayoutParams; 14 import android.widget.AdapterView; 15 import android.widget.BaseAdapter; 16 import android.widget.Gallery; 17 import android.widget.ImageView; 18 import android.widget.LinearLayout; 19 import android.widget.TextView; 20  21 public class MainActivity extends Activity { 22     private List<ImageView> views = new ArrayList<ImageView>(); 23     /** 图片资源 */ 24     private int[] res = new int[] { R.drawable.image1, R.drawable.image2, 25             R.drawable.image3, R.drawable.image4 }; 26     private ImageView[] dots; 27     int len = 4; 28     int currentItem = 0;// 当前选中的viewPager的item 29     private Gallery gallery; 30     private LinearLayout layout_point; 31     /** 定时滑动 */ 32     private final Handler slideHandler = new Handler(); 33     /** 滑动 */ 34     private final Runnable slideRun = new Runnable() { 35  36         @Override 37         public void run() { 38             // TODO Auto-generated method stub 39             currentItem++; 40             currentItem = checkPosition(currentItem); 41             ((MyGallery) gallery).slide(MyGallery.RIGHT); 42             slideHandler.postDelayed(this, 2000); 43         } 44     }; 45  46     @Override 47     protected void onCreate(Bundle savedInstanceState) { 48         super.onCreate(savedInstanceState); 49         setContentView(R.layout.activity_main); 50         // 初始化中间 51         layout_point = (LinearLayout) this.findViewById(R.id.layout_dots); 52         gallery = (Gallery) findViewById(R.id.mygallery); 53         gallery.setSpacing(20); 54         init(); 55     } 56  57     public void init() { 58         dots = new ImageView[len]; 59         for (int j = 0; j < len; j++) { 60             // 添加图片 61             final ImageView iv = new ImageView(this); 62             iv.setImageResource(res[j]); 63             views.add(iv); 64             iv.setOnTouchListener(new OnTouchListener() { 65  66                 @Override 67                 public boolean onTouch(View v, MotionEvent event) { 68                     if (event.getAction() == MotionEvent.ACTION_DOWN) { 69                         iv.setAlpha(70); 70                         slideHandler.removeCallbacks(slideRun); 71                     } 72                     return false; 73                 } 74             }); 75             // 添加索引 76             ImageView imageView = new ImageView(this); 77             imageView.setLayoutParams(new LayoutParams(15, 15)); 78             dots[j] = imageView; 79             TextView tv = new TextView(this); 80             tv.setText("  "); 81             if (j == 0) { 82                 // 默认进入程序后第一张图片被选中; 83                 dots[j].setBackgroundResource(R.drawable.yst_i_pageon); 84             } else { 85                 dots[j].setBackgroundResource(R.drawable.yst_i_pageoff); 86             } 87  88             layout_point.addView(tv); 89             layout_point.addView(imageView); 90         } 91         gallery.setAdapter(new ImageAdapter()); 92         gallery.setSelection((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2) 93                 % len); 94         gallery.setOnItemSelectedListener(selectListener); 95         ((MyGallery) gallery).setViews(views); 96         // TODO 定时滑动 97         startSlide(); 98     } 99 100     private AdapterView.OnItemSelectedListener selectListener = new AdapterView.OnItemSelectedListener() {101 102         @Override103         public void onItemSelected(AdapterView<?> parent, View view,104                 int position, long id) {105             // TODO Auto-generated method stub106             if (position >= len) {107                 position = position % len;108                 currentItem = position;109             }110             selectPage();111         }112 113         @Override114         public void onNothingSelected(AdapterView<?> parent) {115             // TODO Auto-generated method stub116         }117     };118 119     public class ImageAdapter extends BaseAdapter {120 121         public int getCount() {122             if (views != null) {123                 return Integer.MAX_VALUE;124             } else {125                 return 0;126             }127         }128 129         public Object getItem(int position) {130             if (position >= len) {131                 position = position % len;132             }133 134             return position;135         }136 137         public long getItemId(int position) {138             if (position >= len) {139                 position = position % len;140             }141             return position;142         }143 144         public View getView(int position, View convertView, ViewGroup parent) {145             View view = convertView;146             if (position >= len) {147                 position = position % len;148             }149             if (view == null) {150                 view = views.get(position);151             }152 153             return view;154         }155     }156 157     /** 开始滑动 */158     public void startSlide() {159         slideHandler.postDelayed(slideRun, 2000);160     }161 162     public int checkPosition(int position) {163         if (position >= len) {164             position = position % len;165         }166 167         return position;168     }169 170     /** 设置当前选中页 */171     private void selectPage() {172         /** 设置当前显示的页码 */173         for (int i = 0; i < len; i++) {174             dots[currentItem].setBackgroundResource(R.drawable.yst_i_pageon);175             if (currentItem != i) {176                 dots[i].setBackgroundResource(R.drawable.yst_i_pageoff);177             }178         }179     }180 }
点击我

下载就不用了吧。。。

© Copyright by allen

更多相关文章

  1. 自定义类似于listView中Item背景
  2. Android提取系统所有的缩略图
  3. Android(安卓)SlidingMenu 使用详解
  4. layout中设置图片自适应大小,并且设置最大宽高
  5. 为Android内核添加新驱动,并添加到menuconfig菜单【实践简记】
  6. Android(安卓)代码修改按钮上的图片
  7. Android获取SD卡上图片和视频文件及其缩略图
  8. Android(安卓)adb 模拟滑动 按键 点击事件
  9. Android(安卓)保存图片到相册无法显示的问题

随机推荐

  1. 编译Android内核
  2. android 动态壁纸 3 解决 动态壁纸列表界
  3. 使用Bottom Navigation Activity实现Andr
  4. 【Android】android:windowSoftInputMode
  5. This Android(安卓)SDK requires Android
  6. Android中shape属性详解:(设置圆角、设置渐
  7. [Android(安卓)Training视频系列]1.1 Cre
  8. Android(安卓)framework Watchdog的监控
  9. Android(安卓)UI开发专题
  10. Android(安卓)简介:Android(安卓)SDK 和开