实现安卓图片轮播效果(上)非循环轮播
2016-01-19 17:45
323 查看
这次用Viewpager实现图片轮播效果,但是viewpager无法实现循环轮播的效果,所以呢,先写一个demo吧。
直接上代码:
MainActivity.java:
我的activity_main.xml:
轮播下面的点被按下:
dot.focused.xml :
轮播下面的点没有被按下:
dot.normal.xml :
直接上代码:
MainActivity.java:
package com.viewpage; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageView; import android.widget.TextView; /** * 程序主入口 * */ public class MainActivity extends Activity { private int currentItem; private int oldPosition=0; /** * 存入图片的List */ private List<ImageView> images; /** * 存入图片下面的点 */ private List<View> dots; /** * 每张图片对应的title */ private String[] titles=new String[]{ "第一次写图片轮播", "第二次写图片轮播", "第三次写图片轮播", "第四次写图片轮播", "第五次写图片轮播" }; /** * 存入每张图片的Id,分别是:a,b,c,d,e */ private int[] imageIds=new int[]{ R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; /** * ViewPager UI控件放入图片 */ private ViewPager mViewPager; private ViewPagerAdapter mAdapter; /** * 线程池定时执行图片切换 */ private ScheduledExecutorService mScheduledExecutorService; private TextView title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView();//初始化View /** * 写下一个图片适配器 */ mAdapter=new ViewPagerAdapter(); mViewPager.setAdapter(mAdapter); /** * 监听mViewPager的滑动效果,滑动状态 */ mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { title.setText(titles[position]); dots.get(position).setBackgroundResource(R.drawable.dot_focused); dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal); currentItem=position; oldPosition=position; } @Override public void onPageScrolled(int position, float arg1, int arg2) { } boolean flag=false; @Override public void onPageScrollStateChanged(int state) { switch (state) { //手指滑动 case 1: flag=false; break; //界面切换 case 2: flag=true; break; //滑动结束 case 0: //假设是最后一张,向右滑动时,切换到第一张 if(mViewPager.getCurrentItem()==mViewPager.getAdapter().getCount()-1 && !flag){ mViewPager.setCurrentItem(0); } //假设是第一张,向左滑动时,切换到最后一张 else if(mViewPager.getCurrentItem()==0 && !flag){ mViewPager.setCurrentItem(mViewPager.getAdapter().getCount()-1); } break; default: break; } } }); } private void initView() { mViewPager=(ViewPager) findViewById(R.id.vp); images=new ArrayList<ImageView>(); for(int i=0;i<imageIds.length;i++) { ImageView img=new ImageView(this); img.setBackgroundResource(imageIds[i]); images.add(img); } /** * 放入图片下的点 */ dots=new ArrayList<View>(); dots.add(findViewById(R.id.dot_0)); dots.add(findViewById(R.id.dot_1)); dots.add(findViewById(R.id.dot_2)); dots.add(findViewById(R.id.dot_3)); dots.add(findViewById(R.id.dot_4)); title=(TextView) findViewById(R.id.title); title.setText(titles[0]); } /** * 重写适配器 * 添加数据 * @author Eva-Beta * */ private class ViewPagerAdapter extends PagerAdapter{ @Override public int getCount() { return images.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } @Override public Object instantiateItem(ViewGroup view, int position) { view.addView(images.get(position)); return images.get(position); } @Override public void destroyItem(ViewGroup view, int position, Object object) { view.removeView(images.get(position)); } } /** * 实现run函数,运行图片轮播 * @author Eva-Beta * */ private class ViewPagerTask implements Runnable{ @Override public void run() { currentItem=(currentItem+1)%imageIds.length; mHandler.sendEmptyMessage(0); } } /** * 接收子线程传递过来的数据 */ private Handler mHandler=new Handler(){ public void handleMessage(android.os.Message msg) { mViewPager.setCurrentItem(currentItem); }; }; @Override protected void onStart() { super.onStart(); mScheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); mScheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 5, 5, TimeUnit.SECONDS); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); } }
我的activity_main.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" > <FrameLayout android:layout_width="match_parent" android:layout_height="200dip" > <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="35dip" android:layout_gravity="bottom" android:background="#33000000" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图片标题" android:textColor="@android:color/white" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dip" android:orientation="horizontal" > <View android:id="@+id/dot_0" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="@drawable/dot_focused"/> <View android:id="@+id/dot_1" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="@drawable/dot_normal"/> <View android:id="@+id/dot_2" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="@drawable/dot_normal"/> <View android:id="@+id/dot_3" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="@drawable/dot_normal"/> <View android:id="@+id/dot_4" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="@drawable/dot_normal"/> </LinearLayout> </LinearLayout> </FrameLayout> </RelativeLayout>
轮播下面的点被按下:
dot.focused.xml :
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <corners android:radius="5dip"/> <solid android:color="#55000000"/> </shape>
轮播下面的点没有被按下:
dot.normal.xml :
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <corners android:radius="5dip"/> <solid android:color="#aaFFFFFF"/> </shape>
相关文章推荐
- spring mvc freemarker 中遍历枚举
- Android中设置文本颜色的五种方法
- 设计模式之十二:状态模式(State)
- poj3267
- 使用SDWebImage清除图片缓存
- hdu1874 畅通工程续
- 浅谈iOS中MVVM的架构设计与团队协作
- 2016
- 给 Android 开发者的 RxJava 详解
- android 调试多设备相同序列号问题
- Android图像处理之色彩特效处理(学习笔记)
- 【Storm入门指南】附录C 安装真实示例
- 将java web项目转为maven项目
- Android加壳原理分析
- 分布式消息系统:Kafka
- java执行效率低,但效率就低吗?
- Wireshark图解教程(简介、抓包、过滤器)
- 【Storm入门指南】附录B 安装Storm集群
- 从框架到完整项目搭建,实战项目《约个球》(4)-Intellij IDEA 导入library和jar文件
- redis常见操作命令-pub/sub