很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的状态也在变化),用定时器来实现不难。
[java] view
plaincopyprint?
-
import java.util.ArrayList;
-
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.os.Message;
-
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.TextView;
-
-
public class MainActivity extends Activity {
-
private int imageIds[];
-
private String[] titles;
-
private ArrayList<ImageView> images;
-
private ArrayList<View> dots;
-
private TextView title;
-
private ViewPager mViewPager;
-
private ViewPagerAdapter adapter;
-
private int oldPosition = 0;
-
private int currentItem;
-
private ScheduledExecutorService scheduledExecutorService;
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
-
imageIds = new int[]{
-
R.drawable.a,
-
R.drawable.b,
-
R.drawable.c,
-
R.drawable.d,
-
R.drawable.e
-
};
-
-
titles = new String[]{
-
"巩俐不低俗,我就不能低俗",
-
"扑树又回来啦!再唱经典老歌引万人大合唱",
-
"揭秘北京电影如何升级",
-
"乐视网TV版大派送",
-
"热血屌丝的反杀"
-
};
-
-
images = new ArrayList<ImageView>();
-
for(int i =0; i < imageIds.length; i++){
-
ImageView imageView = new ImageView(this);
-
imageView.setBackgroundResource(imageIds[i]);
-
images.add(imageView);
-
}
-
-
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]);
-
mViewPager = (ViewPager) findViewById(R.id.vp);
-
adapter = new ViewPagerAdapter();
-
mViewPager.setAdapter(adapter);
-
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
-
@Override
-
public void onPageSelected(int position) {
-
title.setText(titles[position]);
-
dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
-
dots.get(position).setBackgroundResource(R.drawable.dot_focused);
-
oldPosition = position;
-
currentItem = position;
-
}
-
@Override
-
public void onPageScrolled(int arg0, float arg1, int arg2) {
-
}
-
@Override
-
public void onPageScrollStateChanged(int arg0) {
-
}
-
});
-
}
-
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 void destroyItem(ViewGroup view, int position, Object object) {
-
view.removeView(images.get(position));
-
}
-
@Override
-
public Object instantiateItem(ViewGroup view, int position) {
-
view.addView(images.get(position));
-
return images.get(position);
-
}
-
}
-
-
@Override
-
protected void onStart() {
-
-
super.onStart();
-
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
-
-
scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 2, 2, TimeUnit.SECONDS);
-
}
-
-
-
private class ViewPagerTask implements Runnable {
-
@Override
-
public void run() {
-
currentItem = (currentItem +1) % imageIds.length;
-
-
handler.obtainMessage().sendToTarget();
-
}
-
}
-
private Handler handler = new Handler(){
-
@Override
-
public void handleMessage(Message msg) {
-
-
mViewPager.setCurrentItem(<span style="font-family: Arial, Helvetica, sans-serif;">currentItem</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
-
}
-
};
-
}
ViewPager实现图片轮翻效果
原文:http://blog.csdn.net/shineflowers/article/details/41015957