效果图:
1,描述
StackView继承了AdapterViewAnimator,它也会显示Adapter提供的多个View组件,也可以通过showNext、showPrevious显示下一个、上一个组件,但它是以“堆叠(stack)”的方式显示多个列表项。
控制View的显示有两种方式:
a:拖走stack顶端的view,显示下一个view,也可以把上一个view拖入stack中显示出来;
b:通过调用showNext、showPrevious方法显示下一个、上一个组件;
2,XML属性:
android:animateFirstView:设置显示该组件的第一个View时是否使用动画
android:inAnimation:设置组件显示时使用的动画
android:loopViews:设置循环到最后一个组件后是否自动“转头”到第一个组件
android:outAnimation:设置组件隐藏时使用的动画
3,常用方法:
//设置显示第一个View时是否使用动画
setAnimateFirstView(true);
//设置适配器
setAdapter(adapter);
setInAnimation(Contextcontext,intresourceID);//设置图片进入动画
setOutAnimation(Contextcontext,intresourceID);//设置图片出来动画
showNext();//显示下一个view
showPrevious();//显示下一个view
实例:
layout/activity_main.xml
<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns: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"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="当前位置"
android:textColor="#ff0000"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="向下轮播"/>
<Button
android:id="@+id/btn_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="向上轮播"/>
</LinearLayout>
<StackView
android:id="@+id/stackview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:loopViews="true"/>
</LinearLayout>
com/example/administrator/MainActivity.java
packagecom.example.administrator;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.AdapterView;
importandroid.widget.StackView;
importandroid.widget.TextView;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Timer;
importjava.util.TimerTask;
publicclass MainActivity extends Activity {
privateStackView stackView;
privateint[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3,R.drawable.ym4, R.drawable.ym5, R.drawable.ym6};
privateList<Integer> images = new ArrayList<>();
privateImageAdapter imageAdapter;
privateTextView textView;
privateTimer down;
privateTimer timerup;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stackView= findViewById(R.id.stackview);
textView= findViewById(R.id.textview);
initData();
imageAdapter= new ImageAdapter(images, this);
stackView.setAdapter(imageAdapter);
stackView.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id){
textView.setText("第" +(position + 1) + "个杨幂");
}
});
}
publicvoid initData() {
for(int i = 0; i < imageIds.length; i++) {
images.add(imageIds[i]);
}
}
publicvoid click(View view) {
switch(view.getId()) {
caseR.id.btn_down:
if(timerup != null) {
timerup.cancel();
}
down= new Timer();
down.schedule(newTimerTask() {
@Override
publicvoid run() {
runOnUiThread(newRunnable() {
@Override
publicvoid run() {
stackView.showNext();
}
});
}
},0, 1000);
break;
caseR.id.btn_up:
if(down != null) {
down.cancel();
}
timerup= new Timer();
timerup.schedule(newTimerTask() {
@Override
publicvoid run() {
runOnUiThread(newRunnable() {
@Override
publicvoid run() {
stackView.showPrevious();
}
});
}
},0, 1000);
break;
}
}
}
com/example/administrator/ImageAdapter.java
packagecom.example.administrator;
importandroid.content.Context;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;
importjava.util.List;
publicclass ImageAdapter extends BaseAdapter {
privateList<Integer> mImages;
privateContext mContext;
publicImageAdapter(List<Integer> mImages, Context context) {
this.mImages= mImages;
mContext= context;
}
@Override
publicint getCount() {
returnmImages.size();
}
@Override
publicObject getItem(int position) {
returnmImages.get(position);
}
@Override
publiclong getItemId(int position) {
returnposition;
}
@Override
publicView getView(int position, View convertView, ViewGroup parent) {
ImageViewimageView = new ImageView(mContext);
imageView.setImageResource(mImages.get(position));
returnimageView;
}
}