顶部轮播图(自动循环滚动)

来源:互联网 发布:专业数据分析团队介绍 编辑:程序博客网 时间:2024/06/05 17:01

1.MainActivity:

public class MainActivity extends Activity {private ViewPager viewPager;private TextView tv_title;private LinearLayout dot_layout;private ArrayList<Ad> list = new ArrayList<Ad>();// 使用handler实现自动循环滚动图片private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);if (isRunning) {handler.sendEmptyMessageDelayed(0, 5000);}};};private boolean isRunning = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initListener();initData();}private void initView() {setContentView(R.layout.activity_main);viewPager = (ViewPager) findViewById(R.id.viewPager);tv_title = (TextView) findViewById(R.id.tv_title);dot_layout = (LinearLayout) findViewById(R.id.dot_layout);isRunning = true;handler.sendEmptyMessageDelayed(0, 2000);}private void initListener() {viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {updateTitleAndDots();}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});}private void initData() {list.add(new Ad(R.drawable.a, "巩俐不低俗,我们就不低俗"));list.add(new Ad(R.drawable.b, "朴树又回来了,再唱经典老歌引万人同唱"));list.add(new Ad(R.drawable.c, "揭秘北京电影如何升级"));list.add(new Ad(R.drawable.d, "乐视网TV版,大放送"));list.add(new Ad(R.drawable.e, "热血屌丝的反杀"));initDots();viewPager.setAdapter(new AdPagerAdapter());updateTitleAndDots();}/** * 初始化点 */private void initDots() {for (int i = 0; i < list.size(); i++) {View view = new View(this);LayoutParams params = new LayoutParams(15, 15);// 设置点的大小if (i != 0) {params.leftMargin = 10;}view.setLayoutParams(params);view.setBackgroundResource(R.drawable.selector_dot);dot_layout.addView(view);}}/** * 更新文本 */private void updateTitleAndDots() {int currentPager = viewPager.getCurrentItem() % list.size();tv_title.setText(list.get(currentPager).getTitle());for (int i = 0; i < dot_layout.getChildCount(); i++) {dot_layout.getChildAt(i).setEnabled(i == currentPager);}}private class AdPagerAdapter extends PagerAdapter {/** * 返回多少Pager */@Overridepublic int getCount() {return 100;}/** * true:表示不去创建,使用缓存 false:表示去重新创建 */@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}/** * 类似于BaseAdapter的getView方法, 用来将数据设置给view */@Overridepublic Object instantiateItem(ViewGroup container, int position) {View view = View.inflate(MainActivity.this, R.layout.adapter_ad, null);ImageView imaView = (ImageView) view.findViewById(R.id.image);Ad ad = list.get(position % list.size());// 对position取余,实现循环滑动imaView.setImageResource(ad.getResId());container.addView(view);// 将view加入到ViewPagerreturn view;}/** * 销毁pager position:当前要销毁的是第几个pager object:当前要销毁的pager */@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}@Overrideprotected void onDestroy() {super.onDestroy();isRunning = false;// 停止自动轮播效果}}

2.数据bean,Ad.class

public class Ad {private int resId;private String title;public Ad(int resId, String title) {super();this.resId = resId;this.title = title;}public int getResId() {return resId;}public void setResId(int resId) {this.resId = resId;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}
3.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" >    <android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"        android:layout_height="200dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:layout_alignBottom="@id/viewPager"        android:background="#88000000"        android:orientation="vertical">        <TextView            android:id="@+id/tv_title"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:padding="5dp"            android:gravity="center_horizontal"            android:textSize="18sp"            android:textColor="#ffffff"            android:singleLine="true"            android:ellipsize="end"            android:text="我是文本"/>                <LinearLayout            android:id="@+id/dot_layout"             android:layout_width="match_parent"            android:layout_height="match_parent"            android:gravity="center_horizontal"            android:orientation="horizontal">        </LinearLayout>    </LinearLayout></RelativeLayout>

4.adapter_ad.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/image"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:scaleType="fitXY"        android:src="@drawable/a" /></LinearLayout>

Demo地址:http://download.csdn.net/detail/qq_26323183/8807327

0 0
原创粉丝点击