ViewPager动态显示图片

效果图


整体

自定义提示性圆点的样式

point_bg_enable.xml(启用时的样式---灰色圆点)

<?xml version="1.0" encoding="utf-8"?>
<shape  xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <!--启用时的 圆点 -->
    <!--corners为圆角,radius为角的弧度  -->
    <corners  android:radius="0.5dp"/>
    <!-- 实体,以#AAFFFFFF颜色填充 -->
    <solid android:color="#AAFFFFFF"/>"
    

</shape>
point_bg_normal.xml(未 启用时的样式---白色圆点

<?xml version="1.0" encoding="utf-8"?>
<shape  xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
        <!--未启用时的 圆点 -->
    <!--corners为圆角,radius为角的弧度  -->
    <corners  android:radius="0.5dp"/>
    <!-- 试题,以#AAFFFFFF颜色填充 -->
    <solid android:color="#55000000"/>
    

</shape>
point.xml(圆点的效果)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <!-- android:state_enabled 能够接受触摸或者点击事件,未点击和点击时的控件背景 -->
    <item android:drawable="@drawable/point_bg_enable"  android:state_enabled="true"></item>
     <item android:drawable="@drawable/point_bg_normal"  android:state_enabled="false"></item>
</selector>
activity_main.xml

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
       <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="wrap_content"
            android:layout_alignBottom="@id/viewpager"
            android:background="#33000000"
            android:orientation="vertical"
            android:padding="5dp" >

            <TextView
                android:id="@+id/tv_image_description"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="图片下方的文字描述"
                android:textColor="@android:color/white" />

            <LinearLayout
                android:id="@+id/ll_point_group"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="5dp"
                android:orientation="horizontal" >
            </LinearLayout>
        </LinearLayout>

</LinearLayout>
MainActivity

package com.example.viewpagerdemo;

import java.util.ArrayList;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity {
private List<ImageView> mImageList;
//图片描述的字符串数组
private String[] imageDescriptionArray={
		"可爱的萨摩耶", //
		"扑树又回来啦!再唱经典老歌引万人大合唱", //
		"揭秘北京电影如何升级", //
		"乐视网TV版大派送", //
		"热血屌丝的反杀" };
//记录上一次点的位置,默认为0
private int previousPointEnale = 0;
//动态播放图片的控件
private ViewPager myViewPager;
//图片下方提示性点点控件
private  LinearLayout IIPointGroup;
private TextView tvDescription;
//记录是否停止播放
private boolean isStop=false;
ImageView mImageView;
LayoutParams params;


	@Override 
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//初始化数据
		init();
	}


	private void init() {
		initControl();
		inEvent();
		initBanners();
		
	}
	private void initControl() {
		mImageList = new ArrayList<ImageView>();
		myViewPager=(ViewPager)findViewById(R.id.viewpager);
		tvDescription=(TextView)findViewById(R.id.tv_image_description);
		IIPointGroup=(LinearLayout)findViewById(R.id.ll_point_group);
		
	}
	private void inEvent() {
		//初始化图片数组
		int ImageIds[]={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};
		//初始化广告资源
		for(int id:ImageIds){
			mImageView=new ImageView(this);
			mImageView.setBackgroundResource(id);
			mImageList.add(mImageView);
			//初始化图片下方的提示性点点
			View dot=new View (this);
			dot.setBackgroundResource(R.drawable.point);
			params=new LayoutParams(5,5);
			params.leftMargin=10;
			dot.setLayoutParams(params);
			dot.setEnabled(false);
			IIPointGroup.addView(dot);
		};
		myViewPager.setAdapter(new MyAdapter());
		// 设置广告标语和底部“点”选择状态
		tvDescription.setText(imageDescriptionArray[0]);
	    IIPointGroup.getChildAt(0).setEnabled(true);
	 // 设置广告条跳转时,广告语和状态语的变化
	    myViewPager.setOnPageChangeListener(new MyListener());
	 // 初始化广告条,当前索引Integer.MAX_VALUE的一半
	 int index = (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % mImageList.size());
	 myViewPager.setCurrentItem(index); // 设置当前选中的Page,会触发onPageChangListener.onPageSelected方法
		
	}
// ViewPager数据适配器
	private class MyAdapter extends PagerAdapter {
			
			@Override
			public int getCount() {
				// 将viewpager页数设置成Integer.MAX_VALUE,可以模拟无限循环
				return Integer.MAX_VALUE;
			}
		
		
			@Override
			public boolean isViewFromObject(View arg0, Object arg1) {
			// 复用对象 true 复用view false 复用的是Object
				return arg0==arg1;
			}


			@Override
			public void destroyItem(ViewGroup container, int position, Object object) {
				//销毁对象,销毁索引的位置
				 container.removeView(mImageList.get(position % mImageList.size()));
			}
			@Override
			public Object instantiateItem(ViewGroup container, int position) {
				//初始化一个对象,   初始化对象的索引位置
				container.addView(mImageList.get(position % mImageList.size()));
				return mImageList.get(position % mImageList.size());
			}

	}
	private class MyListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageSelected(int arg0) {
			// 获取新的位置
						int newPosition = arg0 % imageDescriptionArray.length;
						// 设置广告标语
						tvDescription.setText(imageDescriptionArray[newPosition]);
						// 消除上一次的状态点
						IIPointGroup.getChildAt(previousPointEnale).setEnabled(false);
						// 设置当前的状态点“点”
						IIPointGroup.getChildAt(newPosition).setEnabled(true);
						// 记录位置
						previousPointEnale = newPosition;
			
		}

	

	}
	private void initBanners() {
		// 开启子线程,让广告条以2秒的频率循环播放
				new Thread(new Runnable() {

					@Override
					public void run() {

						while (!isStop) {
							SystemClock.sleep(2000);
							runOnUiThread(new Runnable() {
								public void run() {
									myViewPager.setCurrentItem(myViewPager.getCurrentItem() + 1);
								}
							});
						}
					}
				}).start();
		
	}
	@Override
	protected void onDestroy() {
		// activity销毁时候,关闭循环播放
		isStop = true;
		super.onDestroy();
	}


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值