Android圖片輪播效果的幾種實現方法

大家在使用APP的過程中,經常會看到上部banner圖片輪播的效果,那麼今天我們就一起來學習一下,android中圖片輪詢的幾種實現方法:

第一種:使用動畫的方法實現:(代碼繁瑣)

這種發放需要:兩個動畫效果,一個佈局,一個主類來實現,不多說了,來看代碼吧:

public class IamgeTrActivity extends Activity {
/** Called when the activity is first created. */


public ImageView imageView;
public ImageView imageView2;


public Animation animation1;
public Animation animation2;

public TextView text;


public boolean juage = true;


public int images[] = new int[] { R.drawable.icon, R.drawable.expriment,
R.drawable.changer, R.drawable.dataline, R.drawable.preffitication };


public int count = 0;


public Handler handler = new Handler();


public Runnable runnable = new Runnable() {


@Override
public void run() {
// TODO Auto-generated method stub
AnimationSet animationSet1 = new AnimationSet(true);
AnimationSet animationSet2 = new AnimationSet(true);
imageView2.setVisibility(0);
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
-1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet1.addAnimation(ta);
animationSet1.setFillAfter(true);
ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
0f, Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet2.addAnimation(ta);
animationSet2.setFillAfter(true);
//iamgeView 出去  imageView2 進來
imageView.startAnimation(animationSet1);
imageView2.startAnimation(animationSet2);
imageView.setBackgroundResource(images[count % 5]);
count++;
imageView2.setBackgroundResource(images[count % 5]);

text.setText(String.valueOf(count));
if (juage)
handler.postDelayed(runnable, 6000);
Log.i("handler", "handler");
}
};


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView);
imageView2 = (ImageView) findViewById(R.id.imageView2);
text=(TextView)findViewById(R.id.text);
text.setText(String.valueOf(count));
//將iamgeView先隱藏,然後顯示
imageView2.setVisibility(4);
handler.postDelayed(runnable, 2000);
}


public void onPause() {
juage = false;
super.onPause();
}
}


佈局代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
android:id="@+id/rl">

<ImageView 
   android:id="@+id/imageView" 
   android:layout_width="fill_parent"
   android:background="@drawable/icon"
   android:layout_below="@+id/rl"
android:layout_height="120dp" />

<ImageView 
   android:id="@+id/imageView2"
   android:layout_width="fill_parent"
   android:background="@drawable/expriment" 
   android:layout_below="@+id/rl"
android:layout_height="120dp" />

<TextView 
   android:id="@+id/text"  
   android:layout_width="fill_parent"  
   android:layout_height="wrap_content"  
   android:layout_below="@id/imageView"/>
</RelativeLayout>

代碼下載地址:http://download.csdn.net/detail/weimo1234/8438135

第二種:使用ViewFlipper實現圖片的輪播

           

Android系統自帶的一個多頁面管理控件,它可以實現子界面的自動切換:

首先 需要爲ViewFlipper加入View

(1) 靜態導入:在layout佈局文件中直接導入

(2) 動態導入:addView()方法

ViewPlipper常用方法:

setInAnimation:設置View進入屏幕時候使用的動畫

setOutAnimation:設置View退出屏幕時候使用的動畫

showNext:調用該函數來顯示ViewFlipper裏面的下一個View

showPrevious:調用該函數來顯示ViewFlipper裏面的上一個View

setFlipInterval:設置View之間切換的時間間隔

startFlipping使用上面設置的時間間隔來開始切換所有的View,切換會循環進行

stopFlipping:停止View切換

講了這麼多,那麼我們今天要實現的是什麼呢?

(1) 利用ViewFlipper實現圖片的輪播

(2) 支持手勢滑動的ViewFlipper

我們需要先準備幾張圖片:把圖片放進drawable中

創建兩個動畫:在res下面新建一個folder裏面新建兩個xml:

left_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:duration="5000"
        android:fromXDelta="100%p"
        android:toXDelta="0"/>
</set>

left_out:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromXDelta="0"
        android:toXDelta="-100%p"
        android:duration="5000"/>
</set>

一個佈局文件:

<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"
    tools:context=".MainActivity" >

    <ViewFlipper 
        android:id="@+id/flipper"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

</RelativeLayout>

一個主類:

public class MainActivity extends Activity {


private ViewFlipper flipper;
private int[] resId = {R.drawable.pc1,R.drawable.pc2,R.drawable.pc3,R.drawable.pc4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

flipper = (ViewFlipper) findViewById(R.id.flipper);

/*
* 動態導入的方式爲ViewFlipper加入子View
* */
for (int i = 0; i < resId.length; i++) {
flipper.addView(getImageView(resId[i]));

}
/*
* 爲ViewFlipper去添加動畫效果
* */
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.setFlipInterval(5000);
flipper.startFlipping();
}
private ImageView getImageView(int resId){
ImageView image = new ImageView(this);
image.setBackgroundResource(resId);
return image;
}

}

那麼這樣就實現了一個圖片輪詢的功能效果了

我們還可以添加點擊,滑動效果:

我們還需要添加兩個向右的滑動效果:

right_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromXDelta="0"
        android:toXDelta="-100%p"
        android:duration="2000"/>
</set>

right_out:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromXDelta="100%p"
        android:toXDelta="0"
        android:duration="2000"/>
</set>

然後我們還需要在主類裏面添加(如果你不想讓圖片自動播放,只想通過手勢來實現圖片播放那麼你需要把“爲ViewFlipper添加動畫效果的代碼”刪掉):

public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX(); 
break;
case MotionEvent.ACTION_MOVE://判斷向左滑動還是向右滑動
if (event.getX() - startX > 100) {
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.showPrevious(); 
}else if (startX - event.getX() > 100) {
flipper.setInAnimation(this, R.anim.right_in);
flipper.setOutAnimation(this, R.anim.right_out);
flipper.showNext(); 
}

case MotionEvent.ACTION_UP:
break;


}
return super.onTouchEvent(event);
}

這樣我們利用我們的ViewFlipper完成的圖片輪詢的功能就做完了。

代碼下載地址:http://download.csdn.net/detail/weimo1234/8438129

注:以後發現更多的方法還將續寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章