android TV实现textview跑马灯效果

一、跑马灯实现方式:

1.常用方式:

我们直接Google “跑马灯实现方式”可找到许多许多,但是实现的大多数都是直接获取textview,在属性中设置如下参数:

	android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
参数讲解:

ellipsize:表示textview以一行内容显示的时候,以何种方式显示,总共有五种方式:

start:将文字开头省略,用符号"..."代替。

middle:将文字中间部分省略,用符号"..."代替。

end:将文字结尾部分省略,用符号"..."代替。

marquee:表示当前内容一行显示不下的时候,用跑马灯形式展示。

none:默认,没有任何效果。


marqueeRepeatLimit:表示回滚的次数,一般设置为marquee_forever,表示永久滚动。

singleLine:设置为true,表示当前textview显示内容只能为一行。


2.自定义View实现方式:

代码如下:

public class ScrollTextView extends AppCompatTextView {

    private boolean canFocused = false ;

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

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

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

    @Override
    protected void onFocusChanged(boolean arg0, int arg1, Rect arg2) {
        // TODO Auto-generated method stub
        super.onFocusChanged(arg0, arg1, arg2);
    }
    @Override
    public boolean isFocused() {
        return isCanFocused();
    }

    @Override
    public boolean hasFocus() {
        return isCanFocused();
    }

    public boolean isCanFocused() {
        return canFocused;
    }

    public void setCanFocused(boolean canFocused) {
        this.canFocused = canFocused;
    }

}

setCanFocused是我们自己设置的方法,用来给textview付焦点。

同时,我们在xml文件中还要设置当前TextView为ScrollTextView,并给它设置跑马灯的属性即可。


但是,当前的设置都仅仅只为TextView为直接选中效果,如果作为子控件使用,则会存在无法获取焦点的情况。


二、TextView作为子控件如何实现选中滚动:

当我们的TextView作为布局中的一个子控件的时候,选中父控件的时候,textview如何实现跑马灯效果。其实方法很简单,主要是局部刷新一下TextView控件,我们这里使用的方式为重新填写TextView的name值,达到选中子控件TextView实现跑马灯效果。

代码如下:

class HomeFocusListener implements View.OnFocusChangeListener {

        private ScrollTextView mTextView;
        private String mName;

        public HomeFocusListener(ScrollTextView view, String name) {
            mTextView = view;
            mName = name;
        }

        @Override
        public void onFocusChange(View view, boolean b) {
            if (b) {
                mTextView.setText(mName);
                mTextView.setCanFocused(true);
                zoomOutWindow(view);
            } else {
                mTextView.setText(mName);
                mTextView.setCanFocused(false);
                zoomInWindow(view);
            }
        }
    }

这里new一个onFocusChangeListener监听,父控件实现该监听事件,并传入子控件的TextView值和name值,根据是否获得焦点b的不同设置TextView来是否获得焦点。


补(20171206):

testview重新写入一遍的目的是为了获得焦点,我们也可以选择直接实现选中效果来实现获取焦点:

使用属性:setSelected.

我们查看源码就会明白的:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值