Android使用AdapterViewFlipper实现消息垂直广告条

产品需求要做一个消息垂直滚动的效果,如图所示,看了一遍基本都是用ViewsFlipper或者TextSwitcher来实现,这里就不对这两种实现方式做过多的介绍,有兴趣的可以自己尝试一下。在这个效果中使用了 AdapterViewFlipper

首先来看看效果图

Android使用AdapterViewFlipper实现消息垂直广告条_第1张图片

 

 1,AdapterViewFilpper 继承 了AdapterViewAnimator,它也会显示 Adapter 提供的多个 View 组件,但它每次只能显示一个View组件,程序可通过showPrevious()和showNext()方法控制该组件显示上一个、下一个组件。

 2,AdapterViewFilpper可以在多个View切换过程中使用渐隐渐显的动画效果。除此之外,还可以调用该组件的startFlipping()控制它“自动播放”下一个View组件。

常用的AdapterViewFilpper的xml中的属性
android:animateFirstView    设置显示该组件的第一个View时是否使用动画
android:inAnimation    设置组件显示时使用的动画
android:loopViews    设置循环到最后一个组件后是否自动“转头”到第一个组件
android:outAnimation    设置组件隐藏时使用的动画
android:autoStart    设置显示该组件是否是自动播放
android:flipInterval    设置自动播放的时间间隔

其中前四个属性是继承自父类AdapterViewAnimator,后两个autoStart和flipInterval是在AdapterViewFlipper自身中定义的。

在布局文件中添加:

                

两个动画文件:注意,注意,注意是放在res目录下的animator文件夹不是anim

roll_news_out


roll_news_in



Activity中

//贴出关于AdapterViewFlipper的代码,其他无关代码就不贴上来了
 @BindView(R.id.fol_avf)
 AdapterViewFlipper viewFlipper;

 private ViewFlipperAdapter flipperAdapter;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        flipperAdapter = new ViewFlipperAdapter(this.getActivity2());
        //allRollNews是自定义的消息数据实体类
        flipperAdapter.setAllList(allRollNews);
        viewFlipper.setAdapter(flipperAdapter);

}

adapter:

public class ViewFlipperAdapter extends BaseAdapter {

    private List allList = new ArrayList<>();
    private Context context;
    private SpannableString spannableString;

    public ViewFlipperAdapter(Context context) {
        this.context = context;
        spannableString = new SpannableString("");

    }

    public List getAllList() {
        return allList;
    }

    public void setAllList(List allList) {
        this.allList = allList;
        this.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return allList.size();
    }

    @Override
    public Object getItem(int position) {
        return allList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        FlippterViewHolder holder = null;
        if (view == null) {
            holder = new FlippterViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.item_roll_news, null, false);
            holder.mTextView = view.findViewById(R.id.irn_news);
            view.setTag(holder);
        } else {
            holder = (FlippterViewHolder) view.getTag();
        }
        holder.mTextView.setText(Html.fromHtml(allList.get(position).getNews()));
        return view;
    }

    private class FlippterViewHolder {
        TextView mTextView;
    }

}

其中RollNewBean是自定义的实体类,这里可以替换成自己适配的数据类型

item_roll_news




    

    

 

你可能感兴趣的:(AndroidUI控件)