ViewPager實現圖片輪翻效果
很多App都有這種效果,特別一些電商類的App,頂部每隔幾秒鐘會向右翻頁顯示下張圖片,用來作推廣或者內容展示用的。今天來簡單地模仿一下,還自帶一個自動跳動的小功能(底部有幾個小點,圖片移動的時候,點的狀態也在變化),用定時器來實現不難。
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);
//圖片ID
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() {
// TODO Auto-generated method stub
super.onStart();
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
//每隔2秒鐘切換一張圖片
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>
}
};
}
</pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!