Viewpage的简单实现轮播墙


package com.itheima.viewpagetest;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.preference.PreferenceActivity.Header;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity implements OnPageChangeListener{

	private ViewPager viewpager;
	private TextView tv_Imager;
	private int[] imagerIDs;
	private String[] texts;
	private List<ImageView> imagelist;
	private LinearLayout llayout;
	private View v;
	private int index=0;
	private boolean falg=true;
	
	private Handler handler=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			//设置当前显示的第几张图片:获取当前显示的item+1
			viewpager.setCurrentItem(viewpager.getCurrentItem()+1);
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		init();
		new Thread(new Runnable(){
			@Override
			public void run() {
				//在子线程中循环发送消息到handler来实现循环轮播墙
				while(falg){
					SystemClock.sleep(2000);
					handler.sendEmptyMessage(0);
				}
			}
		}).start();
		
	}

	private void init() {
		
		viewpager = (ViewPager) findViewById(R.id.viewpager);
		tv_Imager = (TextView) findViewById(R.id.tv_Imager);
		llayout=(LinearLayout) findViewById(R.id.llayout); //文字下面的点
		//文字 及 图片的数组  
		texts = getImageDescription();
		imagerIDs = getImageIDs();
		//存储图片的集合
		imagelist=new ArrayList<ImageView>();
		//设置点的大小 及margin 间隔
		LayoutParams params = new LayoutParams(5, 5);
		params.leftMargin=5;
		ImageView image;
		for (int i = 0; i < imagerIDs.length; i++) {
			image=new ImageView(this);
			//设置轮播的图片
			image.setBackgroundResource(imagerIDs[i]);
			imagelist.add(image); //将图片添加到集合
			v = new View(this);
			v.setBackgroundResource(R.drawable.point_background); //设置点当前显示的背景
			v.setLayoutParams(params);
			v.setEnabled(false);
			llayout.addView(v);
		}
		viewpager.setAdapter(new MyAdapter());
		
		//获取当前要显示的第几张图片
		int item=Integer.MAX_VALUE / 2;
		item=item - (item % imagelist.size());
		
		viewpager.setCurrentItem(item);//设置当前显示的item
		viewpager.setOnPageChangeListener(this);  //设置图片的监听事件
		
		llayout.getChildAt(item % imagelist.size()).setEnabled(true);//将当前的小圆点设置为对应的图片位置
		tv_Imager.setText(texts[item % imagelist.size()]); //对应 的文本
		index=item % imagelist.size();  //当前所显示的下标索引
	}
	
	class MyAdapter extends PagerAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return Integer.MAX_VALUE;  //要实现循环所以设置了一个比较大的值
		}

		/**
		 * 当在滑动中的View对象和进来的对象是否是同一个对像,放回true和false
		 */
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0==arg1;
		}

		/**
		 * position对象的是将要销毁的下标
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			viewpager.removeView(imagelist.get(position % imagelist.size()));
		}

		@Override//当前图片ImageView
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			viewpager.addView(imagelist.get(position % imagelist.size()));
			return imagelist.get(position % imagelist.size());
					
		}
		
	}

	public int[] getImageIDs() {
		return new int[] {
				R.drawable.a,
				R.drawable.b,
				R.drawable.c,
				R.drawable.d,
				R.drawable.e
		};
	}
	
	public String[] getImageDescription() {
		return new String[]{
				"巩俐不低俗,我就不能低俗",
				"扑树又回来啦!再唱经典老歌引万人大合唱",
				"揭秘北京电影如何升级",
				"乐视网TV版大派送",
				"热血屌丝的反杀"
		};
	}

	//图片被选中时的监听事件方法:
	@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 parseme) {
		// TODO Auto-generated method stub
		int position=parseme % imagelist.size();
		tv_Imager.setText(texts[position]);
		llayout.getChildAt(position).setEnabled(true);
		llayout.getChildAt(index).setEnabled(false);
		index=position;
	}
	
}


布局文件:

<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"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="200dip" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/viewpager"
        android:background="#33000000"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_Imager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="sdfdsf"
            android:textColor="@android:color/white" />

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

</RelativeLayout>


小圆点背景:


<?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/point_enable"></item>
    <item android:state_enabled="false" android:drawable="@drawable/point_normal"></item>

</selector>

不同的圆点:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"
    >
    <corners android:radius="0.5dip"/>
    <solid android:color="#55000000"/>

</shape>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"
    >
    <corners android:radius="0.5dip"/>
    <solid android:color="#aaFFFFFF"/>

</shape>




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值