我們經常看見很多軟體有圖檔自動切換的效果,看上去很高大上。其實做一個簡單的效果很簡單,用ViewPager實作
先是簡單的布局檔案
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl_home"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.mobilesafe.HomeActivity">
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="150dp" />
現在是java代碼
public class HomeActivity extends Activity {
private ViewPager vp = null;
private ScheduledExecutorService scheduledExecutorService=null;
private int currentItem = 0;//目前頁面
private ArrayList imageViews; //存放imageview的集合類
//存放圖檔id的數組
private static int[] imageResIds = new int[]{R.drawable.smile,
R.drawable.b,R.drawable.d,R.drawable.f,R.drawable.h,
R.drawable.g
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_home);
vp = (ViewPager) findViewById(R.id.vp);
//滑動的圖檔
imageViews = new ArrayList();
for (int i = 0; i
ImageView imageView = new ImageView(this);
imageView.setImageResource(imageResIds[i]);
//之前沒設定這個屬性,運作時圖檔并沒有填滿viewpager,這個與圖檔大小相關,可以試一下
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageViews.add(imageView);
}
//給VviewPager添加資料
vp.setAdapter(new MyAdapter());
}
//自定義的擴充卡
class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
return imageResIds.length;
}
//執行個體化item
@Override
public Object instantiateItem(View arg0, int arg1) {
//将每個圖檔加入到ViewPager裡
((ViewPager) arg0).addView(imageViews.get(arg1));
return imageViews.get(arg1);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
//将每個圖檔在ViewPager裡釋放掉
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
//view 和 Object 是不是一個對象
return arg0 == arg1;
}
}
@Override
protected void onStart() {
//用一個定時器 來完成圖檔切換
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
//通過定時器 來完成 每1秒鐘切換一個圖檔,經過指定的時間後,執行所指定的任務
//command 所要執行的任務
//initialDelay 第一次啟動時 延遲啟動時間
//period 每間隔多次時間來重新啟動任務
//unit 時間機關
scheduledExecutorService.scheduleAtFixedRate(new SwitchTask (), 500, 10000, TimeUnit.MILLISECONDS);
super.onStart();
}
@Override
protected void onStop() {
//停止圖檔切換
scheduledExecutorService.shutdown();
super.onStop();
}
//用來完成圖檔切換的任務
private class SwitchTask implements Runnable {
public void run() {
//改變目前頁面
currentItem= (currentItem+ 1) % imageViews.size(); //實作循環播放的效果,是以要取模
//實作圖檔切換 可以用handler 在這裡用一個更簡單的方式
// handler.obtainMessage().sendToTarget();
runOnUiThread(new Runnable() {
@Override
public void run() {
//設定viewPager目前頁面
vp.setCurrentItem(currentItem);
}
});
}
}
}