Android跑马灯遇到的问题(有些手机有效果,有些手机没效果)

跑马灯的记录

Android跑马灯的实现很简单,有android系统提供的api就可以实现。问题在于在实际的手机上运行的时候,有一些手机可以有效果,有一些手机没效果。所以这个问题可能每个人遇到的情况不一样,我这里说说我遇到的情况的解决办法,不一定对你有用,但是我用了之后,是解决了。

解决方法

1.xml布局文件

  <com.flj.latte.ec.widget.MarqueTextView
                                android:id="@+id/item_control_marquee"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:layout_below="@+id/linearLayoutCompat"
                                android:singleLine="true"
                                android:ellipsize="marquee"
                                android:focusable="true"
                                android:focusableInTouchMode="true"
                                android:marqueeRepeatLimit="marquee_forever"
                                android:scrollHorizontally="true"
                                android:visibility="visible"
                                android:layout_gravity="center_vertical"
                                android:gravity="center_vertical"
                                android:textSize="12sp"
                                android:textColor="@color/ec_color_7A7A7A"
                                >
                                <requestFocus/>
      </com.flj.latte.ec.widget.MarqueTextView>

2.自己写一个自定义view

public class MarqueTextView extends androidx.appcompat.widget.AppCompatTextView {

    private boolean isMarqueeEnable = false;


    public MarqueTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MarqueTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MarqueTextView(Context context) {
        super(context);
    }

    @Override
    public boolean isFocused() {
        return true;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
    }


    public void setMarqueeEnable(boolean enable) {
        if (isMarqueeEnable != enable) {
            isMarqueeEnable = enable;
            if (enable) {
                setEllipsize(TextUtils.TruncateAt.MARQUEE);
            } else {
                setEllipsize(TextUtils.TruncateAt.END);
            }
            onWindowFocusChanged(enable);
        }
    }

    public boolean isMarqueeEnable() {
        return isMarqueeEnable;
    }
}

3.调用的地方
我延时了0.5秒去请求控件获取焦点,然后解决了跑马灯失效的问题。特别是切换页面的时候。

        Observable.just("Amit")
                //延时两秒,第一个参数是数值,第二个参数是事件单位
                .delay((long) 0.5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {
                        marqueeView.setSelected(true);
                        marqueeView.setMarqueeEnable(true);
                        marqueeView.requestFocus();
                    }
                });

4.如果还是不行,可以试试其他人写的三方库。
https://github.com/AnyLifeZLB/ScrollTextView

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值