1. AdapterViewFlipper的作用
- AdapterView繼承了AdapterViewAnimator,它也會顯示Adapter提供的多個View組件,但每次只能顯示一個View組件,程序可通過showPrevious和showNext()方法控制該組件顯示上一個、下一個組價。
- AdapterViewFlipper可以在多個View切換過程中使用漸隱漸現的動畫效果,除此之外,還可以調用該組件的startFlipping()控制它“自動播放”下一個View組件。
2. 常用的XML屬性和方法
2.1 常用XML屬性
XML屬性 | 說明 |
---|---|
android:animateFirstView | 設置顯示該組件的第一個View時是否使用動畫 |
android:inAnimation | 設置組件顯示時使用的動畫 |
android:loopViews | 設置循環到最後一個組件後是否自動“轉頭”到第一個組件 |
android:outAnimation | 設置組件隱藏時使用的動畫 |
android:autoStart | 設置顯示該組件是否是自動播放 |
android:flipInterval | 設置自動播放的時間間隔 |
其中前四個屬性是繼承自父類AdapterViewAnimator,後兩個autoStart和flipInterval是在AdapterViewFlipper自身中定義的。
2.2 常用方法
- setAutoStart(boolean autoStart) 設置是否自動播放,如果設置爲true,當AdapterViewFlipper被添加到window中後,就會自動播放,與這個方法對應的xml屬性是android:autoStart。
- setFlipInterval(int flipInterval) 播放的間隔,也就是從當前內容到下一個內容之間的間隔
- isAutoStart() 判斷是否設置了autoStart
- startFlipping() 開始播放
- stopFlipping() 停止播放
- isFlipping() 判斷是否正在播放
3. 代碼示例
3.1 Activity代碼
package com.xiayutian.widgettest;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterViewFlipper;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class FlipperActivity extends AppCompatActivity {
@BindView(R.id.adapter_view_flipper)
AdapterViewFlipper adapterViewFlipper;
@BindView(R.id.pre)
Button pre;
@BindView(R.id.next)
Button next;
@BindView(R.id.auto)
Button auto;
public int[] imageIds = {R.drawable.screen1, R.drawable.screen2, R.drawable.screen3, R.drawable.screen4,
R.drawable.screen5, R.drawable.screen6, R.drawable.screen7, R.drawable.screen8, R.drawable.screen9};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper_activity);
ButterKnife.bind(this);
initFlipper();
}
private void initFlipper() {
FlipperAdapter flipperAdapter = new FlipperAdapter();
adapterViewFlipper.setAdapter(flipperAdapter);
}
@OnClick(R.id.pre)
void showPre() {
adapterViewFlipper.showPrevious();
}
@OnClick(R.id.next)
void showNext() {
adapterViewFlipper.showNext();
}
@OnClick(R.id.auto)
void autoPlay() {
if (adapterViewFlipper.isFlipping()) {
adapterViewFlipper.stopFlipping();
} else {
adapterViewFlipper.startFlipping();
}
}
class FlipperAdapter extends BaseAdapter {
@Override
public int getCount() {
return imageIds.length;
}
@Override
public Object getItem(int position) {
return imageIds[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(FlipperActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageIds[position]);
return imageView;
}
}
}
3.2 xml代碼
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<AdapterViewFlipper
android:id="@+id/adapter_view_flipper"
android:layout_width="0dp"
android:layout_height="0dp"
android:autoStart="true"
android:flipInterval="2000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:loopViews="false"/>
<Button
android:id="@+id/pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上一個"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下一個"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自動播放"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/next"
app:layout_constraintStart_toEndOf="@id/pre" />
</androidx.constraintlayout.widget.ConstraintLayout>