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() {
@Override
public 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
到这里就结束啦。
评论