Android实现搜索框文字轮播控件
先看效果图:

实现思路
添加依赖:
implementation 'com.haowen:textbanner:1.0.4'1、想要达到轮播效果,两个View交替出现即可,既然是两个View那么就需要一个父容器(TextBanner继承FrameLayout):
public class TextBanner extends FrameLayout {/*** 两个View交替出现*/private View viewFirst, viewSecond;}
2、间隔性就用Handler的postDelayed来实现就行了,为了防止内存泄漏,这里采用WeakHandler
mHandler.postDelayed(task, mDelayTime);/*** 轮播的定时任务:当页数大于1时轮播*/private Runnable task = new Runnable() {@Overridepublic void run() {updateTipAndPlayAnimation();mHandler.postDelayed(this, mDelayTime);}};
3、交替出现的动画(TextBanner只用了一个简单的Y方向平移动画,并不支持动画设置,因为我觉得没必要花里胡哨的,如果后期有需要,可以考虑提示自定义)
/*** 生成动画** @param fromYValue 起始值* @param toYValue 结束值* @return 动画*/private Animation newAnimation(float fromYValue, float toYValue) {Animation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,Animation.RELATIVE_TO_SELF, fromYValue, Animation.RELATIVE_TO_SELF, toYValue);anim.setDuration(mDuration);anim.setInterpolator(new DecelerateInterpolator());return anim;}
5、数据设置适配器,这里采用Adapter的形式(看方法名应该很好理解,似曾相识):
onCreateView设置显示View
getCount数据个数
onBindViewData给View设置数据显示
notifyDataChange数据更新通知
/*** 数据适配器*/public abstract static class Adapter {/*** 数据更新观察这*/private Observable mObservable;/*** 注册数据更新观察** @param observable 数据更新观察*/private void registerObservable(Observable observable) {this.mObservable = observable;}/*** 通知数据更新*/public void notifyDataChange() {if (mObservable != null) {mObservable.onChange();}}/*** Item个数** @return Item个数*/public abstract int getCount();/*** View生成** @param parent 父容器* @return Item的View*/public abstract View onCreateView(@NonNull ViewGroup parent);/*** 数据绑定View** @param convertView 内容View* @param position 位置*/public abstract void onBindViewData(@NonNull View convertView, int position);}
源码地址:
https://github.com/HaowenLee/TextBanner
到这里就结束啦。
评论
