天天看點

Java做圖檔自動切換,簡單的圖檔自動切換效果實作

我們經常看見很多軟體有圖檔自動切換的效果,看上去很高大上。其實做一個簡單的效果很簡單,用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);

}

});

}

}

}