第一种方法(很普遍,很简单的在xml布局文件中设置TextView的属性):

<TextView
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:textSize="28sp"
android:text="路漫漫其修远兮,吾将上下而求索"
android:textColor="#00ff00"
android:scrollHorizontally="true"/>

重要代码:

//设置为跑马灯显示

android:ellipsize="marquee"

//获取焦点
          android:focusable="true"

//可以通过toucth来获得focus
          android:focusableInTouchMode="true"

//设置重复的次数
          android:marqueeRepeatLimit="marquee_forever"

//单行显示文字
        android:singleLine="true"

2.第二种方法,由于大部分走马灯文字会在手机屏幕的右侧开始,这需要自定义控件来实现了

java代码:

package com.example.cameratestdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView; /**
* 自定义控件循环走马灯的实现
*
* @author cyf 继承自TextView
*/
public class Util extends TextView implements Runnable {
private static final String TAG = "MarqueeTextView";
// 设置跑马灯重复的次数,次数
private int circleTimes = 3;
//记录已经重复了多少遍
private int hasCircled = 0;
private int currentScrollPos = 0;
// 跑马灯走一遍需要的时间(秒数)
private int circleSpeed = 10;
// 文字的宽度
private int textWidth = 0; private boolean isMeasured = false;
// Handler机制
private Handler handler;
private boolean flag = false; // 构造方法
public Util(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.removeCallbacks(this);
post(this);
}
/**
* 画笔工具
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); if (!isMeasured) {
getTextWidth();
isMeasured = true;
}
} @Override
public void setVisibility(int visibility) {
// 二次进入时初始化成员变量
flag = false;
isMeasured = false;
this.hasCircled = 0;
super.setVisibility(visibility);
} @Override
public void run() {
// 起始滚动位置
currentScrollPos += 1;
scrollTo(currentScrollPos, 0);
// Log.i(TAG, "pos"+currentScrollPos);
// 判断滚动一次
if (currentScrollPos >= textWidth) {
// 从屏幕右侧开始出现
currentScrollPos = -this.getWidth();
//记录的滚动次数大设定的次数代表滚动完成,这个控件就可以隐藏了
if (hasCircled >= this.circleTimes) {
this.setVisibility(View.GONE);
flag = true;
}
hasCircled += 1;
} if (!flag) {
// 滚动时间间隔
postDelayed(this, circleSpeed);
}
} /**
* 获取文本显示长度
*/ private void getTextWidth() {
Paint paint = this.getPaint();
String str = this.getText().toString();
Log.i(TAG, str);
if (str == null) {
textWidth = 0;
}
textWidth = (int) paint.measureText(str);
} /**
* 设置滚动次数,达到次数后设置不可见
*
* @param circleTimes
*/
public void setCircleTimes(int circleTimes) {
this.circleTimes = circleTimes;
} public void setSpeed(int speed) {
this.circleSpeed = speed;
} public void startScrollShow() {
if (this.getVisibility() == View.GONE)
this.setVisibility(View.VISIBLE);
this.removeCallbacks(this);
post(this);
} private void stopScroll() {
handler.removeCallbacks(this);
}
}

布局文件中呀使用自定义控件了:

<com.example.cameratestdemo.Util
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="路漫漫其修远兮,吾将上下而求索"
android:textColor="#00ff00"
android:textSize="28sp" >
</com.example.cameratestdemo.Util>

源码下载:

http://yunpan.cn/c3kL7ILLL7tCt  访问密码 bd75

欢迎提出意见,希望可以给大家带来帮助,谢谢

Android-两种方式实现走马灯效果的更多相关文章

  1. Android 两种方式实现类似水波扩散效果

    原文链接 https://mp.weixin.qq.com/s/M19tp_ShOO6esKdozi7Nlg 两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 ...

  2. android两种方式获取AsyncTask返回值

    获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...

  3. Android Studio签名打包的两种方式

    签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如 ...

  4. Android中EditText显示明文与密文的两种方式

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图    代码分析 方式一 /**方式一:*/ private void sh ...

  5. Android画图之抗锯齿 paint 和 Canvas 两种方式

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.    方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. ...

  6. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载

     在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...

  7. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  8. Xamarin Android Activity全屏的两种方式

    方式一 直接在Activity的Attribute中定义 如下 在 MainActivity 中 [Activity(Label = "app", MainLauncher = t ...

  9. Android Activity返回键控制的两种方式

    Android Activity返回键监听的两种方式 1.覆写Activity的OnBackPressed方法 官方解释: Called when the activity has detected ...

随机推荐

  1. xUnit安装及注意事项

    前言 对于单元测试,想必大家都已再熟悉不过了,同时单元测试的重要性也越发突出,在招聘中也特别强调单元测试,但是对于微软内置的单元测试还是太过于繁琐,于是都在寻找一种简洁并且更加轻量的测试工具.用的最多 ...

  2. 门外汉的IT

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机很早就走入了我的生活.小学时,家里放一台联想“天琴”的电脑.它霸气的音箱造型 ...

  3. 使用RequireJs和Bootstrap模态框实现表单提交

    下面我将使用requirejs结合模态框实现三五行代码部署表单提交操作. 传统开发思路如下:

  4. Android随笔之——Android广播机制Broadcast详解

    在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...

  5. Linux模块

    一.为什么要使用模块 由于linux使用的是整体结构,不是模块化的结构,整体结构实现的操作系统可扩展性差.linux为了扩展系统,使用了模块的技术,模块能够从系统中动态装入和卸载,这样使得linux也 ...

  6. spring源码分析之spring-core总结篇

    1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...

  7. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLa ...

  8. 在IE11下设置SharePoint Server 2013却遇到“需要 Internet Explorer 才能使用此功能。”的解决办法

    就在昨天顺利升级到Windows 8.1 随之IE也升级到了IE11,但是当打开IE11设置SharePoint Server 2013的时候遇到了一些小情况: Figure 1使用Windows 8 ...

  9. iframe编程的一些问题

    前几天做一个用iframe显示曲线图的demo,发现对iframe的contentDocument绑定 onclick事件都无效,而在页面中对iframe.contentDocument的onclic ...

  10. Front End Developer Questions 前端开发人员问题(二)CSS 后续

    问题来源:http://markyun.github.io/2015/Front-end-Developer-Questions/ 31.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再 ...