android 自定义View实现广告信息上下滚动效果

本文详细介绍了一种使用XML布局和TextView实现公告栏滚动文本效果的方法。通过在Android项目中设置特定的RelativeLayout属性,结合自定义实现类ScrollBannerNew,实现了文本在两个TextView间上下滚动的动态效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:xml布局

 <RelativeLayout
        android:background="@color/white"
        android:layout_width="match_parent"
        android:layout_height="120px"
        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>

第二步:Activity里面写代码:

/***
     *实现上下滚动
     *
     * **/
    listStr.add("11111111111111");
    listStr.add("222222222222222");
    mBannerTV1 = (TextView) rootView.findViewById(R.id.tv_banner1);
    mBannerTV2 = (TextView) rootView.findViewById(R.id.tv_banner2);
    ScrollBannerNew scrollBannerNew = new ScrollBannerNew();
    scrollBannerNew.aa(mBannerTV1,mBannerTV2);
    scrollBannerNew.setList(listStr);
    scrollBannerNew.startScroll();

第三步:写我们的实现方法类

package com.example.xiaona.mycompany.home;

import android.animation.ObjectAnimator;
import android.os.Handler;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class ScrollBannerNew {

    private Handler handler;
    private boolean isShow;
    private int startY1, endY1, startY2, endY2;
    private Runnable runnable;
    private int position = 0;
    private int offsetY = 100;
    private List<String> list = new ArrayList<>();

    public void aa(final TextView mBannerTV1, final TextView mBannerTV2){
         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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值