先看效果:
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#ccc"/>
<TextSwitcher
android:id="@+id/text_switcher"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#ccc"/>
</LinearLayout>
代码:
public class TestActivity extends RxAppCompatActivity {
private TextSwitcher textSwitcher;
private List<String> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
list.add("这是第一条数据");
list.add("这是第二条数据");
list.add("这是第三条数据");
initView();
beginTurns();
}
private void initView() {
textSwitcher = findViewById(R.id.text_switcher);
textSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView textView = new TextView(TestActivity.this);
textView.setLayoutParams(new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
textView.setGravity(Gravity.CENTER);
textView.setTextSize(16);
return textView;
}
});
textSwitcher.setText(list.get(0));
textSwitcher.setInAnimation(this, R.anim.show);
textSwitcher.setOutAnimation(this, R.anim.hide);
}
@SuppressLint("CheckResult")
private void beginTurns() {
Observable.interval(2, 2, TimeUnit.SECONDS)
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return aLong + 1;
}
})
.compose(this.<Long>bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
textSwitcher.setText(list.get((int) (aLong % list.size())));
}
});
}
}
show动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="1000"
android:fromXDelta="0%"
android:fromYDelta="100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0%"
android:toYDelta="0%">
</translate>
<alpha
android:duration="900"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
hide动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="1000"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0%"
android:toYDelta="-100%">
</translate>
<alpha
android:duration="900"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>