控件:Android自定义竖向滚动新闻条,不知道怎样描述,就起个这个名字吧
功能:仿照京东快报那样类似的上下滚动新闻条。
前言:最开始在网上寻找类似的demo,找到过一些类似的,有一部分是搭配ViewPager使用,设置竖向滚动的。但是写起来终究觉得有一些麻烦,于是开始思考有没有更便捷的实现方式。考虑思路,当前一条上滑淡出,下一条从下面淡入,可以考虑使用两个View的动画来搭配实现。后来又考虑可能要自定义内部的视图,因此借鉴了AdapterView的方式,为这个控件设置Adapter搭配使用,同时实现OnItemClickListener方法设置点击监听,目前就使用来说,还是非常便捷的。
上代码吧
/** * Created by rxj on 2018/4/2. * <p> * 思路: * 1.两个View互相替换 * 2.在第一个View加载时,填充下一个View数据 * 3.动画过程中无法点击 * 4.动画完成后设置点击事件 * 5.定时器自动执行 */ public class VerticalScrollBar2 extends RelativeLayout { private Context mContext; private LinearLayout lin1; private LinearLayout lin2; private ListAdapter adapter; private int currentItemPosition = 0; private int nextItemPosition = 1; private Animation topOut; private Animation bottomIn; private boolean isAnimationing = false; private AdapterView.OnItemClickListener listener; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); goNext(); handler.sendEmptyMessageDelayed(0, 2000); } }; public VerticalScrollBar2(Context context) { this(context, null); } public VerticalScrollBar2(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public VerticalScrollBar2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; View view = LayoutInflater.from(context).inflate(R.layout.view_vertical_scroll_bar, this); lin1 = view.findViewById(R.id.lin_1); lin2 = view.findViewById(R.id.lin_2); topOut = AnimationUtils.loadAnimation