图片循环滑动
循环 图片 滑动
2023-09-14 08:58:59 时间
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <android.support.v4.view.ViewPager 8 android:id="@+id/viewpager" 9 android:layout_width="match_parent" 10 android:layout_height="200dp" /> 11 12 <LinearLayout 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:layout_alignBottom="@id/viewpager" 16 android:background="#33000000" 17 android:orientation="vertical" > 18 19 <!-- 滑动图片下面的文字 --> 20 <TextView 21 android:id="@+id/image_desc" 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:gravity="center" 25 android:text="@string/app_name" 26 android:textColor="@android:color/white" 27 android:textSize="18sp" /> 28 29 <!-- ..... --> 30 <LinearLayout 31 android:id="@+id/point_group" 32 android:orientation="horizontal" 33 android:layout_width="wrap_content" 34 android:layout_gravity="center_horizontal" 35 android:layout_height="wrap_content" > 36 </LinearLayout> 37 38 </LinearLayout> 39 40 </RelativeLayout>
1 package com.example.testdemo;
2
3 import java.util.ArrayList;
4 import android.app.Activity;
5 import android.os.Bundle;
6 import android.os.Handler;
7 import android.support.v4.view.PagerAdapter;
8 import android.support.v4.view.ViewPager;
9 import android.support.v4.view.ViewPager.OnPageChangeListener;
10 import android.view.View;
11 import android.view.ViewGroup;
12 import android.widget.ImageView;
13 import android.widget.LinearLayout;
14 import android.widget.TextView;
15
16 public class MainActivity extends Activity {
17
18 private ViewPager viewPager;
19 private LinearLayout pointGroup;
20 private TextView iamgeDesc;
21 private ArrayList<ImageView> imageList;
22 // 上一个页面的位置
23 protected int lastPosition;
24 // 判断是否自动滚动
25 private boolean isRunning = false;
26
27 // 图片资源ID
28 private final int[] imageIds = { R.drawable.a, R.drawable.b, R.drawable.c,
29 R.drawable.d, R.drawable.e };
30
31 // 图片标题集合
32 private final String[] imageDescriptions = { "巩俐不低俗,我就不能低俗",
33 "扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
34
35 @Override
36 protected void onCreate(Bundle savedInstanceState) {
37 super.onCreate(savedInstanceState);
38 setContentView(R.layout.activity_main);
39
40 viewPager = (ViewPager) findViewById(R.id.viewpager);
41 pointGroup = (LinearLayout) findViewById(R.id.point_group);
42 iamgeDesc = (TextView) findViewById(R.id.image_desc);
43 iamgeDesc.setText(imageDescriptions[0]);
44
45 imageList = new ArrayList<ImageView>();
46 for (int i = 0; i < imageIds.length; i++) {
47
48 // 初始化图片资源
49 ImageView image = new ImageView(this);
50 image.setBackgroundResource(imageIds[i]);
51 imageList.add(image);
52
53 // 添加指示点
54 ImageView point = new ImageView(this);
55 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
56 LinearLayout.LayoutParams.WRAP_CONTENT,
57 LinearLayout.LayoutParams.WRAP_CONTENT);
58
59 params.rightMargin = 20;
60 point.setLayoutParams(params);
61
62 point.setBackgroundResource(R.drawable.point_bg);
63 if (i == 0) {
64 point.setEnabled(true);
65 } else {
66 point.setEnabled(false);
67 }
68 pointGroup.addView(point);
69 }
70
71 viewPager.setAdapter(new MyPagerAdapter());
72
73 // viewPager.setCurrentItem(Integer.MAX_VALUE/2 -
74 // (Integer.MAX_VALUE/2%imageList.size())) ;
75
76 viewPager.setOnPageChangeListener(new OnPageChangeListener() {
77
78 @Override
79 /**
80 * 页面切换后调用
81 * position 新的页面位置
82 */
83 public void onPageSelected(int position) {
84
85 position = position % imageList.size();
86
87 // 设置文字描述内容
88 iamgeDesc.setText(imageDescriptions[position]);
89
90 // 改变指示点的状态
91 // 把当前点enbale 为true
92 pointGroup.getChildAt(position).setEnabled(true);
93 // 把上一个点设为false
94 pointGroup.getChildAt(lastPosition).setEnabled(false);
95 lastPosition = position;
96
97 }
98
99 @Override
100 /**
101 * 页面正在滑动的时候,回调
102 */
103 public void onPageScrolled(int position, float positionOffset,
104 int positionOffsetPixels) {
105 }
106
107 @Override
108 /**
109 * 当页面状态发生变化的时候,回调
110 */
111 public void onPageScrollStateChanged(int state) {
112
113 }
114 });
115
116 /*
117 * 自动循环: 1、定时器:Timer 2、开子线程 while true 循环 3、ColckManager 4、 用handler
118 * 发送延时信息,实现循环
119 */
120 isRunning = true;
121 // handler.sendEmptyMessageDelayed(0, 2000);
122 }
123
124 private Handler handler = new Handler() {
125 public void handleMessage(android.os.Message msg) {
126 // 让viewPager 滑动到下一页
127 viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
128 if (isRunning) {
129 handler.sendEmptyMessageDelayed(0, 2000);
130 }
131 };
132 };
133
134 protected void onDestroy() {
135 isRunning = false;
136 };
137
138 private class MyPagerAdapter extends PagerAdapter {
139
140 @Override
141 // 获得页面的总数
142 public int getCount() {
143 return Integer.MAX_VALUE;
144 }
145
146 @Override
147 /**
148 * 获得相应位置上的view
149 * container view的容器,其实就是viewpager自身
150 * position 相应的位置
151 */
152 public Object instantiateItem(ViewGroup container, int position) {
153 System.out.println("instantiateItem ::" + position);
154 // 给 container 添加一个view
155 container.addView(imageList.get(position % imageList.size()));
156 // 返回一个和该view相对的object
157 return imageList.get(position % imageList.size());
158 }
159
160 @Override // 判断 view和object的对应关系
161 public boolean isViewFromObject(View view, Object object) {
162 if (view == object) {
163 return true;
164 } else {
165 return false;
166 }
167 }
168
169 @Override // 销毁对应位置上的object
170 public void destroyItem(ViewGroup container, int position, Object object) {
171 System.out.println("destroyItem ::" + position);
172 container.removeView((View) object);
173 object = null;
174 }
175 }
176
177 }
相关文章
- html图片左右无缝循环滚动示例
- js图片横排无限循环滚动
- 图片循环滚动代码详细介绍[通俗易懂]
- Android 使用ViewPager实现左右循环滑动图片
- fscanf读取一行字符串-C中带有fscanf的无延迟循环
- Oracle三种循环(For、While、Loop)实现九九乘法表
- 循环学习Linux中while循环的基本使用(linux中while)
- java中for循环的特殊:foreach的使用详解编程语言
- 空文件Linux下循环删除空文件的技巧(linux循环删除)
- Linux系统下循环读取文件的方法(linux循环读取文件)
- MSSQL游标妙用:跳出循环的新方式(mssql 游标跳出循环)
- oracle中跳出循环的优雅方式(oracle 中跳出循环)
- 如何在Oracle中实现循环(Oracle中怎么循环)
- JQuery循环滚动图片代码