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);