Android_UI:ViewAnimator ViewSwitcher TextSwitcher ImageSwicher StackView ViewFlipper AdapterViewFli

transition(过度)效果的控件

ViewAnimator
ViewSwitcher
TextSwitcher
ImageSwitcher
StackView
ViewFlipper
AdapterViewFlipper

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值