本人最近在学习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.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="180dp" /><TextViewandroid:layout_width="match_parent"android:layout_height="30dp"android:layout_marginTop="150dp"android:alpha="0.4"android:background="#CCC" /><LinearLayoutandroid: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

学习日记--ViewPager实现图片自动切换相关推荐

  1. [JS]图片自动切换效果(学习笔记)

    上次在下载的网页中看到 javascript实现图片自动切换效果: <style text="text/css"> /*图片滚动栏*/ .container, .con ...

  2. html5轮播怎么自动换图,js实现轮播图效果 纯js实现图片自动切换

    本文实例为大家分享了纯js实现图片自动切换的具体代码,供大家参考,具体内容如下 1.鼠标经过的时候左右两个小按钮会自动弹出,自动播放停止,点击左右小按钮可以切换图片: 2. 鼠标离开,恢复自动播放: ...

  3. Java做图片自动切换,简单的图片自动切换效果实现

    我们经常看见很多软件有图片自动切换的效果,看上去很高大上.其实做一个简单的效果很简单,用ViewPager实现 先是简单的布局文件 xmlns:tools="http://schemas.a ...

  4. 纯css3实现图片自动切换

    实现图片自动切换需要用到的主要是css3里面的过渡这一节的内容. 大致思路是这样的: 1.将图片设置为li的背景图片: 2.规定一个@keyframes的规则使得图片按照这个规则进行切换: 3.设置每 ...

  5. js实现点击按钮图片自动切换_☆往事随風☆的博客

    文章目录 前言 一.基本思路 二.代码分析 1.创建数组保存图片的存储路径 2.获取按钮对象 3.调用定时器 4.关闭定时器 三.整体代码 四.效果展示 前言 利用js实现一个图片自动切换的功能. 一 ...

  6. html5 背景图片自动换,网站背景图片自动切换特效css代码

    背景图片自动切换特效-sbkko.com body { background: #000; background-attachment: fixed; word-wrap: break-word; - ...

  7. js实现轮播图(点击小图片切换大图片+自动切换)

    js实现轮播图(点击小图片切换大图片+自动切换) 实现效果如下: 点击小图切换大图和轮播标题,点击左右按钮大小图和轮播标题切换,鼠标进入清除定时器,鼠标移出恢复轮播 html代码如下: <div ...

  8. dw html5中怎么设置图片自动切换,DW制作九宫格全屏亮灯轮播图片且自动切换图片教程...

    本文介绍的是利用DW制作九宫格全屏亮灯轮播图片并且可以自动切换图片,而且点击图片时还会亮灯,推荐过来,大家一起来学习吧! 软件名称:Adobe Dreamweaver CS3 官方中文安装版软件大小: ...

  9. html5+实现图片自动切换,js图片自动切换效果处理代码

    var curIndex=0; //时间间隔 单位毫秒 var timeInterval=1000; var arr=new Array(); arr[0]="1.jpg"; ar ...

最新文章

  1. 编译-链接-运行-环境配置各种error汇总
  2. 计算机中的概念: 视图 VS 镜像
  3. 高等数学、线性代数、概率论数理统计书籍推荐
  4. ipv4和ipv6的区别,如何保护ip地址安全?
  5. Cisco 2950 系列交换机实例配置
  6. rmmod: can't change directory to '3.4.39': No such file or directory 解决方法
  7. ubuntu android设备 no permissions
  8. 初级java程序员怎样快速提升自己
  9. 微信推出QQ小程序遭网友吐槽:请不要俄罗斯套娃
  10. 【Flink】Metrics运作机制
  11. 判断是否是完全二叉树_二叉树:我对称么?
  12. centos7安装kylo0.10.1
  13. tdscdma的matlab仿真,基于MATLAB的TDSCDMA调制解调仿真
  14. dnfdpl服务器维护了,魔兽世界TBC:地狱火半岛隐藏的“大恐怖”,魔能机甲成双出没!...
  15. jBox----弹出层插件
  16. 聚合支付机构备案情况分析(截至22年1月27日)
  17. 哪种无线耳机音质最好?盘点2023四款好音质蓝牙耳机
  18. [No000026]365种创业、办公、和生活成长的精华资源
  19. 【Java项目】java实战宠物领养系统项目
  20. “熊猫烧香”病毒简介及特征

热门文章

  1. android lichee编译脚本解析
  2. Oracle Database 12c Attribute Cluster 和 Zone Map 高阶实验
  3. Coursera连接不上的解决方法
  4. python使用Pyinstaller打包整个项目
  5. 说说Mac安装YCM
  6. PHP函数的嵌套调用
  7. C#.NET 无aspx文件部署
  8. 计算摄影学前言(0)
  9. 关于Java+Vue3快速开发框架esdk-nzb-cas的介绍
  10. Unity程序联动rs485可编程开关