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

来源:互联网 发布:开票软件是什么 编辑:程序博客网 时间:2024/06/14 16:37

效果图

这里写图片描述

实现思路

本来想用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();
3 0
原创粉丝点击