zoukankan      html  css  js  c++  java
  • 自定义有焦点的TextView实现广告信息左右一直滚动的跑马灯效果

    import android.content.Context;
    import android.text.TextUtils;
    import android.util.AttributeSet;
    import android.widget.TextView;
    
    /**
     * 有焦点的TextView
     */
    public class FocusedTextView extends TextView {
    
        //开发者通过代码创建对象时, 走此构造方法
        public FocusedTextView(Context context) {
            this(context, null);
            System.out.println("构造方法1");
            //initView();
        }
    
        //AttributeSet:属性集合
        //当控件配有属性时, 走此构造方法, 由系统底层创建对象
        public FocusedTextView(Context context, AttributeSet attrs) {
            this(context, attrs, -1);
            System.out.println("构造方法2");
            //initView();
        }
    
        //defStyleAttr: 样式
        //当控件配有样式时, 走此构造方法, 由系统底层创建对象
        public FocusedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            System.out.println("构造方法3");
            initView();
        }
    
        //初始化当前控件
        private void initView() {
    //        android:ellipsize="marquee"
    //        android:focusable="true"
    //        android:focusableInTouchMode="true"
    //        android:singleLine="true"
            setEllipsize(TextUtils.TruncateAt.MARQUEE);//跑马灯效果
           //setFocusable(true);//有焦点
           //setFocusableInTouchMode(true);//有焦点
            setSingleLine();//只显示一行
        }
    
        //表示当前TextView是否有焦点
        //问题: 当同时多个TextView进行跑马灯效果时, 只有一个有焦点,可以跑起来
        //解决办法: 重写isFocused, 强制返回true
        @Override
        public boolean isFocused() {
            return true;//强制返回true, 表示永远有焦点
        }
    }
    

    package com.loaderman.textviewdemo;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.text.Html;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView tv = (TextView) findViewById(R.id.tv);
            String newMessageInfo = "<font color='red'><b>最新消息:</b></font>苹果8要发布了,小伙伴们你们心动了,心动不如行动哦!";
            tv.setText(Html.fromHtml(newMessageInfo));
        }
    }
    

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.jcf.textviewdemo.MainActivity">
        <com.loaderman.textviewdemo.FocusedTextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:textSize="20sp"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    

    效果图:

    在开发中在布局中设置跑马灯效果.当有多个事,可能会市区焦点,但不到所要的效果,自定义可以解决开发中这类问题!

  • 相关阅读:
    python 小爬虫
    动态规划,网易秋招
    leetcode 3
    leetcode 27 水
    leetcode 21 list merge
    leetcode 15 3sum & leetcode 18 4sum
    leetcode 389 map iterator 的使用
    [转]使用flask实现mock server
    python __str__repr__ 区别
    Robot Framework 源码阅读 day2 TestSuitBuilder
  • 原文地址:https://www.cnblogs.com/loaderman/p/6478943.html
Copyright © 2011-2022 走看看