您的位置:首页 > 其它

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

2015-06-15 11:21 447 查看
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;

@Override
protected 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() {

@Override
public void onPageSelected(int arg0) {
updateTitleAndDots();
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public 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
*/
@Override
public int getCount() {
return 100;
}

/**
* true:表示不去创建,使用缓存 false:表示去重新创建
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}

/**
* 类似于BaseAdapter的getView方法, 用来将数据设置给view
*/
@Override
public 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加入到ViewPager
return view;
}

/**
* 销毁pager position:当前要销毁的是第几个pager object:当前要销毁的pager
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}

}

@Override
protected 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ViewPager 轮播图