学习日记--ViewPager实现图片自动切换
来源:互联网 发布:怎么在淘宝上收藏店铺 编辑:程序博客网 时间:2024/05/17 08:56
本人最近在学习android,因为怕忘记,所以写博客主要来记录自己的学习进程。
不废话直接进入主题
布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="180dp" /> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:layout_marginTop="150dp" android:alpha="0.4" android:background="#CCC" /> <LinearLayout android:id="@+id/rectangle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="20dp" android:layout_marginTop="165dp" android:orientation="horizontal" /></RelativeLayout>注意:由于使用的是RelativeLayout布局,所以TextView控件一定要在<android.support.v4.view.ViewPager>之后,不让会被遮盖掉。drawable目录rectangle_selector.xml:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@drawable/rectangle_focus"></item> <item android:state_enabled="false" android:drawable="@drawable/rectangle_unfocus"></item></selector>rectangle_focus.xml:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/holo_red_light"/> <stroke android:width="0dp"/></shape>注意:由于@android:color/holo_red_light所能用的最低sdk版本是14,所以在AndroidManifest.xml将最低sdk版本改成14就行。rectangle_unfocus.xml:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/white"/> <stroke android:width="0dp"/></shape>接下来就是主方法里的内容了public class MainActivity extends Activity {private ViewPager viewpager;private List<ImageView> imageview;private LinearLayout rectangle;//图片下方的指示器private int drawable[];// 图片ID数组//自动切换private Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {viewpager.setCurrentItem(viewpager.getCurrentItem()+1);handler.sendEmptyMessageDelayed(0, 3000);};};
这里使用Handler+message机制,使图片3秒一次切换。
<span style="white-space:pre"></span>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initViews();setListener();updateRectangle();handler.sendEmptyMessageDelayed(0, 3000);}这里就不详细说明。
initViews()方法
<span style="white-space:pre"></span>private void initViews() {viewpager = (ViewPager) findViewById(R.id.viewpager);rectangle = (LinearLayout) findViewById(R.id.rectangle);imageview = new ArrayList<ImageView>();// 将4张图片放到一个数组里drawable = new int[] { R.drawable.spring, R.drawable.summer,R.drawable.autumn, R.drawable.winter };//初始化图片资源for (int i = 0; i < drawable.length; i++) {ImageView image = new ImageView(this);//image.setImageDrawable(getResources().getDrawable(drawable[i]));//这个也可以获取图片资源image.setImageResource(drawable[i]);// 获取图片资源image.setScaleType(ScaleType.FIT_XY);// 使图片填充满整个控件imageview.add(image);}//指示器for (int i = 0; i < imageview.size(); i++) {View view = new View(this);LayoutParams params = new LayoutParams(15, 5);if (i != 0) {params.leftMargin = 10;}view.setLayoutParams(params);view.setBackgroundResource(R.drawable.rectangle_selector);rectangle.addView(view);}viewpager.setAdapter(new MypagerAdapter());}在初始化图片之前,将图片的资源ID放入到一个数组中,再在for循环中获取图片资源,这里可以用setImageDrawable(),也可以使用setImageResource(),前者接受的drawable类型的值,后者接受的是int类型的值;最后将图片添加到imageview图片集合中。
注意:由于我们并不清楚图片的长宽,所以用setScaleType(ScaleType.FIT_XY)将其填充满整个控件。
至于图片下边那些小长方形,即指示器。初始化一个View通过LayoutParams传递进LinearLayout中,
而if语句是为了让右边的小长方形离左边的距离有10dp,而第一个小长方形并不需要。
监听图片切换。
//监听页面变换private void setListener() {viewpager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {updateRectangle();}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});}
// viewpager适配器public class MypagerAdapter extends PagerAdapter {@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(imageview.get(position % imageview.size()));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(imageview.get(position % imageview.size()));return imageview.get(position % imageview.size());}}
viewpager适配器,这里可以看 ViewPager 详解这篇文章。
private void updateRectangle() {int current = viewpager.getCurrentItem() % imageview.size();for (int i = 0; i < rectangle.getChildCount(); i++) {// 设置setEnabled为true的话 在选择器里面就会对应的使用红色颜色rectangle.getChildAt(i).setEnabled(i == current);}}这里通过比较当前的图片的索引号,如果为true,则变为红色,否则为白色。
结语:文章写得不是很好,希望大家多多包容
源码下载
http://download.csdn.net/detail/qq_30428029/9482563
0 0
- 学习日记--ViewPager实现图片自动切换
- 自定义ViewPager实现图片自动切换
- android-ViewPager实现图片自动切换
- ViewPager实现自动切换图片(一)
- 使用ViewPager实现图片自动切换
- 【ViewPager的学习】实现自动循环切换
- 图片自动切换效果ViewPager
- ViewPager实现每隔两秒自动切换图片
- ViewPager实现每隔两秒自动切换图片
- ViewPager实现每隔两秒自动切换图片 (再续)
- ViewPager触摸切换图片并自动切换
- ViewPager实现自动循环切换
- 【ViewPager的学习】三、实现自动循环切换
- ViewPager图片切换简单实现
- ScrollView+ViewPager(上下滚动+自动切换图片)
- ViewPager实现自动无限循环切换
- ScheduledExecutorService实现viewpager的自动切换
- Android ViewPager实现图片 小圆点切换
- iOS 隐藏导航栏UINavigationBar底部黑线
- 大数据应用开发八大基本原则
- Findbugs与ant结合
- Activity的四种launchMode
- int与Integer___
- 学习日记--ViewPager实现图片自动切换
- 大数据处理的三种框架:Storm,Spark和Samza
- zoj 3777(状态压缩dp)
- linux中~和/的区别
- Why Warning:Unable to find optional library: org.apache.http.legacy occurs?
- JQuery 检测浏览器放大缩小
- [LeetCode]29. Divide Two Integers
- linux下mysql和jdk的安装配置
- ro.hardware 由来