Android_UI:ViewAnimator ViewSwitcher TextSwitcher ImageSwicher StackView ViewFlipper AdapterViewFli

来源:互联网 发布:数据用英文怎么说 编辑:程序博客网 时间:2024/06/05 20:08

transition(过度)效果的控件

ViewAnimatorViewSwitcherTextSwitcherImageSwitcherStackViewViewFlipperAdapterViewFlipper

ViewSwitcher+TextSwitcher在前面已经介绍了
Android_UI:ImageView
Android_UI:TextView + TextLinkify + TextSwitcher

ViewSwitcher

在2个子View之间进行切换,只允许有2个view,添加这2个view的方法有2种addView()、通过ViewFactory添加。
这里写图片描述

这里写图片描述

<ViewSwitcher    android:id="@+id/ViewSwitcher"    android:layout_width="wrap_content"    android:layout_height="wrap_content"/>

设置进出动画效果:

Animation slide_in = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);Animation slide_out = AnimationUtils.loadAnimation(context, android.R.anim.slide_out_right);viewSwitcher.setInAnimation(slide_in);viewSwitcher.setOutAnimation(slide_out);

把子View添加到ViewSwitcher中有2种方法,

viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {    @Override    public View makeView() {        return viewList.get((count++)%viewList.size());    }});

或者:

viewSwitcher.addView(tv);viewSwitcher.addView(iv);

展示前一个控件

viewSwitcher.showPrevious();

展示后一个控件:

viewSwitcher.showNext();

ViewFipper

ViewSwitcher只允许有2个view,ViewFipper可以有多个。
这里写图片描述

这里写图片描述

<ViewFlipper    android:id="@+id/viewFlipper"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_margin="30dp"/>

现获取对象,在设置进出动画

Animation slide_in = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);Animation slide_out = AnimationUtils.loadAnimation(context, android.R.anim.slide_out_right);viewFlipper.setInAnimation(slide_in);viewFlipper.setOutAnimation(slide_out);

添加子view

viewFlipper.addView(tv);viewFlipper.addView(iv);viewFlipper.addView(aSwitch);viewFlipper.addView(cb);

展示前一个控件

viewSwitcher.showPrevious();

展示后一个控件:

viewSwitcher.showNext();

ViewFlipper添加子view,除了java代码addView(...),还可以在xml中直接放入view

<ViewFlipper    android:id="@+id/viewFlipper"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:flipInterval="2000"    android:inAnimation="@android:anim/slide_in_left"    android:outAnimation="@android:anim/slide_out_right">    <include layout="@layout/check_box"/>    <include layout="@layout/rating_bar"/>    <include layout="@layout/text_view"/></ViewFlipper>

flipInterval:动画时长
inAnimation:进入动画
outAnimation:退出动画

AdapterViewFlipper

这里写图片描述

这里写图片描述

<AdapterViewFlipper    android:id="@+id/adapterViewFlipper"    android:layout_width="wrap_content"    android:layout_height="wrap_content"/>

现获取对象,在设置进出动画,这个动画必须是ObjectAnimator

Property<View, Float> translationX = View.TRANSLATION_X;ObjectAnimator in = ObjectAnimator.ofFloat(adapterViewFlipper, translationX, -50, 0);ObjectAnimator out = ObjectAnimator.ofFloat(adapterViewFlipper, translationX, 0,200);adapterViewFlipper.setInAnimation(in);adapterViewFlipper.setOutAnimation(out);

设置adapter

public class MyAdapter extends BaseAdapter {    @Override    public int getCount() {        return imgArray.length;    }    @Override    public Object getItem(int position) {        return imgArray[position];    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ImageView iv = new ImageView(context);        iv.setImageResource(imgArray[position]);        return iv;    }}
MyAdapter adapter = new MyAdapter();adapterViewFlipper.setAdapter(adapter);

展示前一个控件

viewSwitcher.showPrevious();

展示后一个控件:

viewSwitcher.showNext();

StackView

介绍:

A view that displays its children in a stack and allows users to discretely swipe through the children

StackView继承自AdapterViewAnimator,也需要设置adapter
这里写图片描述

这里写图片描述
wrap_content 设置width和height,图片之间的间距是不同的

<StackView    android:id="@+id/stackView"    android:loopViews="true"    android:layerType="hardware"    android:layout_marginTop="30dp"    android:layout_width="200dp"    android:layout_height="200dp"></StackView>
属性 说明 loopViews 是否循环 layerType 类型hardware:硬件加速
private int[] imgArray = {R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e,R.mipmap.f};stackView = (StackView) findViewById(R.id.stackView);List<Map<String ,Object>> list = new ArrayList<>();for (int i = 0; i < imgArray.length; i++) {    Map<String, Object> map = new HashMap<>();    map.put("image",imgArray[i]);    list.add(map);}SimpleAdapter adapter = new SimpleAdapter(context,list,R.layout.item_1,new String[]{"image"},new int[]{R.id.iv});stackView.setAdapter(adapter);

Demo

https://git.oschina.net/AndroidUI/Transition01

阅读全文
0 0