android中无限循环滑动的gallery实例
16lz
2022-03-07
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
更多相关文章
- 自定义类似于listView中Item背景
- Android提取系统所有的缩略图
- Android(安卓)SlidingMenu 使用详解
- layout中设置图片自适应大小,并且设置最大宽高
- 为Android内核添加新驱动,并添加到menuconfig菜单【实践简记】
- Android(安卓)代码修改按钮上的图片
- Android获取SD卡上图片和视频文件及其缩略图
- Android(安卓)adb 模拟滑动 按键 点击事件
- Android(安卓)保存图片到相册无法显示的问题