安卓初学:Android实现简单的跑马灯效果总结。

今天学习了安卓跑马灯的效果,在html中使用的标签就是<marquee>...</marquee>。

当插入一个安卓控件TextView,在里面输入的文本就会过长,当用android:singleLine="true"限制为一行显示之后,多余的文本就会隐藏,这个时候想到了使得这段文本变成HTML 中的跑马灯效果。

用到的属性是:android:ellipsize

(其中android:ellipsize还有以下几个属性

android:ellipsize = "end"    省略号在结尾

android:ellipsize = "start"   省略号在开头

android:ellipsize = "middle"     省略号在中间

android:ellipsize = "marquee"  跑马灯)

当加入这个:android:ellipsize="marquee" 时,打开安卓模拟器发现并没有跑马灯的效果,查阅网上,发现还需要加入两段属性,分别是:

android:focusable="true"

android:focusableInTouchMode="true"

加入这两段属性之后,终于有了跑马灯的效果。

但是这是不够的,当我再次创建一个Textview空间,再插入相同的属性让其实现跑马灯的效果我会发现:当一个以上的textview控件需要跑马灯效果的时候,上面的做法只能保证其一个起作用。

于是查阅网上,需要重写一个类来实现多个跑马灯的效果:

首先src文件夹下新建一个类MarqueeText继承自textview,并加入其所有的构造函数,接着实现其中的一个构造方法isFocused()

MarqueeText.java 代码如下:

package com.example.paomadeng;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewDebug.ExportedProperty;
import android.widget.TextView;

public class MarqueeText extends TextView{

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

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

	public MarqueeText(Context context, AttributeSet attrs) {
		super(context, attrs);
		
	}
	
	@Override
	public boolean isFocused() {
		return true;//返回true 使得其有textview具有Focused属性
	}
}

这个时候 在activity_main.xml中引入这个方法,代码如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.example.paomadeng.MarqueeText  <!-- 原来的textview 变成刚才新建类的路径名 -->
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world" />
    
     <com.example.paomadeng.MarqueeText
        android:layout_below="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world" />

</RelativeLayout>

好了打开安卓虚拟机,这个时候看到两个textview都已经具有跑马灯的效果了,用了这个方法就能使得多个textview具有跑马灯的效果了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值