SackView将会以“堆叠(Stack)”方式来显示多个列表项。
为了控制StackView显示的View组件,StackView提供了如下两种控制方式。
1、拖走StackView中处于顶端的View,下一个View将会显示出来。将上一个View拖进StackView,将使之显示出来。
2 通过调用StackView的showNext()、showPrevious()控制显示上一个、下一个组件。
<StackView android:id="@+id/stackView" android:layout_width="match_parent" android:layout_height="wrap_content" android:loopViews="true"> </StackView> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一个" android:onClick="prev" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一个" android:onClick="next" /> </LinearLayout>android:loopViews=”true”表示是否可以循环播放,true可以循环播放,反之不能。
int[] images = { R.drawable.ic_pay_weixin, R.drawable.ic_pay_zhifubao, R.drawable.ic_pay_yilian, R.mipmap.ic_launcher }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); stackView = (StackView) findViewById(R.id.stackView); //模拟stackView中的数据 List<Map<String,Object>> list = new ArrayList<>(); for(int i = 0 ;i <images.length;i++){ Map<String,Object> map = new HashMap<>(); map.put("image",images[i]); list.add(map); } //R.layout.layout_call布局中就是一个ImageView SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.layout_call,new String[]{"image"},new int[]{R.id.image}); //设置数据 stackView.setAdapter(adapter); } public void prev(View view){ //显示上一个组件 stackView.showPrevious(); } public void next(View view){ //显示下一个组件 stackView.showNext(); }就是这样的效果
我测试的时候会有蓝色的框框,不知道怎么去除,路过的大神请赐教(☆_☆)
ViewFlipper的效果和ViewPager差不多,只不过不能通过手势滑动而已。
还可以给他设置进入和出去的动画,通过setInAnimation,和setOutAnimation方法。
ViewFlipper中的元素可以通过addView的方式添加里面要显示的View或者直接在布局中添加子View。
<ViewFlipper android:id="@+id/flipper" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:flipInterval="2000" > <ImageView android:layout_width="fill_parent" android:layout_height="300dip" android:scaleType="fitXY" android:src="@drawable/ic_pay_weixin"/> <ImageView android:layout_width="fill_parent" android:layout_height="300dip" android:scaleType="fitXY" android:src="@drawable/ic_pay_yilian"/> <ImageView android:layout_width="fill_parent" android:layout_height="300dip" android:scaleType="fitXY" android:src="@drawable/ic_pay_zhifubao"/> </ViewFlipper>我这个里面没有给它设置动画,更多参考ViewFlipper使用分析
flipper = (ViewFlipper) findViewById(R.id.flipper); flipper.startFlipping();AdapterViewFlipper继承了AdapterViewAnimator,它会显示一个View组件,可以通过showPrevious()和showNext()方法控制组件显示上一个、下一个组件。
public class ActivityTest extends AppCompatActivity { private StackView stackView; private Gallery gallery; private AdapterViewFlipper adapterViewFlipper; private ViewFlipper flipper; int[] images = { R.drawable.ic_pay_weixin,R.drawable.ic_pay_yilian,R.drawable.ic_pay_zhifubao,R.mipmap.ic_launcher }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); adapterViewFlipper = (AdapterViewFlipper) findViewById(R.id.adapterViewFlipper); List<Map<String,Object>> list = new ArrayList<>(); for(int i = 0 ;i <images.length;i++){ Map<String,Object> map = new HashMap<>(); map.put("image",images[i]); list.add(map); } SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.layout_call,new String[]{"image"},new int[]{R.id.image}); adapterViewFlipper.setAdapter(adapter); } public void prev(View view) { //显示上一个组件 adapterViewFlipper.showPrevious(); //停止自动播放 adapterViewFlipper.stopFlipping(); } public void next(View view) { //显示下一个组件 adapterViewFlipper.showNext(); } }参考博客