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>