自定义View--单行上下滚动广告

Posted pengkv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义View--单行上下滚动广告相关的知识,希望对你有一定的参考价值。

效果图

这里写图片描述

实现思路

本来想用ViewPager的上下滚动来实现,然后发现要又重写ViewPager和滚动效果,比较麻烦,于是就用2个TextView轮流移动实现。

最后发现android的ViewFlipper就可以实现了。。

实现代码

public class ScrollBanner extends LinearLayout {

    private TextView mBannerTV1;
    private TextView mBannerTV2;
    private Handler handler;
    private boolean isShow;
    private int startY1, endY1, startY2, endY2;
    private Runnable runnable;
    private List<String> list;
    private int position = 0;
    private int offsetY = 100;


    public ScrollBanner(Context context) {
        this(context, null);
    }

    public ScrollBanner(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ScrollBanner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        View view = LayoutInflater.from(context).inflate(R.layout.view_scroll_banner, this);
        mBannerTV1 = (TextView) view.findViewById(R.id.tv_banner1);
        mBannerTV2 = (TextView) view.findViewById(R.id.tv_banner2);

        handler = new Handler();

        runnable = new Runnable() {
            @Override
            public void run() {
                isShow = !isShow;

                if (position == list.size())
                    position = 0;

                if (isShow) {
                    mBannerTV1.setText(list.get(position++));
                } else {
                    mBannerTV2.setText(list.get(position++));
                }

                startY1 = isShow ? 0 : offsetY;
                endY1 = isShow ? -offsetY : 0;


                ObjectAnimator.ofFloat(mBannerTV1, "translationY", startY1, endY1).setDuration(300).start();

                startY2 = isShow ? offsetY : 0;
                endY2 = isShow ? 0 : -offsetY;
                ObjectAnimator.ofFloat(mBannerTV2, "translationY", startY2, endY2).setDuration(300).start();

                handler.postDelayed(runnable, 3000);
            }
        };

    }


    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void startScroll() {
        handler.post(runnable);
    }

    public void stopScroll() {
        handler.removeCallbacks(runnable);
    }
}
  • view_scroll_banner.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="公告"
        android:textColor="#e76712"
        android:textSize="16sp" />

    <View
        android:id="@+id/view_divider"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_toRightOf="@id/tv_title"
        android:background="#DDDDDD" />

    <TextView
        android:id="@+id/tv_banner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/view_divider"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="热烈欢迎领导光临" />

    <TextView
        android:id="@+id/tv_banner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/view_divider"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="喜庆国庆欢乐大酬宾" />
</RelativeLayout>
  • 使用方法
scrollBanner.setList(list);
scrollBanner.startScroll();

以上是关于自定义View--单行上下滚动广告的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动上下拖动缩放歌词的功能

自定义View--滚动View

scroll-view组件bindscroll实例应用:自定义滚动条

安卓自定义View文章数据滚动显示数值

自定义ViewpagerIndicator (仿猫眼,添加边缘回弹滚动效果)

Android自定义View实现文本轮播效果