自定义有焦点的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>
效果图:
在开发中在布局中设置跑马灯效果.当有多个事,可能会市区焦点,但不到所要的效果,自定义可以解决开发中这类问题!
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!