Android自定义TextView跑马灯效果

Android自带的跑马灯效果不太好控制,还必须要满足条件才能有效果,而且速度不受控制。前面我的博客中有一篇就是用Android自带的跑马灯效果的,但是基于不同的使用效果,这里在网上找到了一个更好的方法。沿用了作者的一些方法,但是添加了更好的扩展功能,和大家一起分享。这里面有控制往左往右两个方向的实现。

1、首先是简单的布局main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" > 

  <Button
    android:id="@+id/start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="start"
    android:text="开始" /> 

  <Button
    android:id="@+id/stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="stop"
    android:text="停止" /> 

  <Button
    android:id="@+id/startfor0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="startFromHead"
    android:text="重置" /> 

  <com.xuhui.customrolllight.MarqueeText
    android:id="@+id/test"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#339320"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:text="滚动效果,不管多少字" 

    android:ellipsize = "marquee" // 跑马灯效果,字数不超过就不动,超过就滚动
    android:textColor="#000000"
    android:textSize="20dp" >
  </com.xuhui.customrolllight.MarqueeText> 

</LinearLayout> 

2、自定义滚动方法MarqueeText.Java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView; 

public class MarqueeText extends TextView implements Runnable {
private int currentScrollX; // 当前滚动的位置
private boolean isStop = false;
private int textWidth;
private boolean isMeasure = false; 

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

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

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
currentScrollX = this.getWidth();
} 

protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!isMeasure) {
getTextWidth();// 文字宽度只需要获取一次就可以了
isMeasure = true;
}
} 

private void getTextWidth() {
Paint paint = this.getPaint();
String str = this.getText().toString();
textWidth = (int) paint.measureText(str);
} 

@Override
/*
* public void run() { currentScrollX-=2;//滚动速度.+号表示往左边-
* scrollTo(currentScrollX,0); if(isStop){ return; }
* if(getScrollX()<=-(this.getWidth())){ scrollTo(textWidth,0);
* currentScrollX=textWidth; } postDelayed(this, 5); }
*/
public void run() {
currentScrollX += 2;// 滚动速度.+号表示往左边-
scrollTo(currentScrollX, 0);
if (isStop) {
return;
}
if (getScrollX() >= (textWidth)) {
currentScrollX = -(this.getWidth());// 当前出现的位置
}
postDelayed(this, 1);
}
/*( public void run() { 

// currentScrollX += 3;// 滚动速度.+号表示往左边-
// scrollTo(currentScrollX, 0); 

if (textWidth>this.getWidth()) {
currentScrollX += 3;// 滚动速度.+号表示往左边-
scrollTo(currentScrollX, 0);
}
if (getScrollX() >= (textWidth)) {
// scrollTo(this.getWidth(),0);
currentScrollX = -(this.getWidth());// 当前出现的位置
}
postDelayed(this, 5);
})这里面实现的是没有省略号的效果。文字没有超出框的长度就不滚,超出就滚*/ 

// 开始滚动
public void startScroll() {
isStop = false;
this.removeCallbacks(this);
post(this);
} 

// 停止滚动
public void stopScroll() {
isStop = true;
} 

// 从头开始滚动
public void startFromHead() {
currentScrollX = 0;
startScroll();
}
}

上面注释掉的代码是实现文字往右边跑

3、下面是主程序MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View; 

public class MainActivity extends Activity { 

private MarqueeText test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test=(MarqueeText) findViewById(R.id.test); 

}
public void start(View v){
test.startScroll();
}
public void stop(View v){
test.stopScroll();
}
public void startFromHead(View v){
test.startFromHead();
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android用过TextView实现跑马灯效果的示例

    以前就遇到过这个问题,今天重新拾起来. 跑马灯效果其实就是当文字超过TextView控件宽度的时候,使用滚动的方式显示出来: 方法1:(直接xml搞定) Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee": 2.TextView必须单行显示,且内容必须超出TextView宽度: 3.TextView要获得焦点才能滚动. xml代码如下: <TextView android:id="@+i

  • Android TextView跑马灯效果实现方法

    本文实例讲述了Android TextView跑马灯效果实现方法.分享给大家供大家参考,具体如下: public class MyTextView extends TextView{ public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyTextView(Context context, A

  • Android中使用TextView实现文字跑马灯效果

    通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:

  • Android 中TextView中跑马灯效果的实现方法

     条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须超出TextView大小 3.TextView要获得焦点才能滚动 mTVText.setText("超过文本长度的数据"); mTVText.setSingleLine(true);设置单行显示 mTVText.setEllipsize(TruncateAt.MARQUEE);设置跑马灯显示效果 TextView.setHorizontallyScrol

  • Android基于TextView实现跑马灯效果

    本文实例为大家分享了Android TextView实现跑马灯效果的具体代码,供大家参考,具体内容如下 当Layout中只有一个TextView需要实现跑马灯效果时,操作如下. 在Layout的TextView配置文件中增加         android:ellipsize="marquee"         android:focusable="true"         android:focusableInTouchMode="true"

  • TextView实现跑马灯效果 就这么简单!

    一.方法 这里我们用两种方法来实现跑马灯效果,虽然实质上是一种 实质就是: 1.TextView调出跑马灯效果 2.TextView获取焦点 第一种: 1.TextView调出跑马灯效果 android:ellipsize="marquee" 2.TextView获取焦点 android:focusable="true" android:focusableInTouchMode="true" 说明: 这种方法如果界面上别的控件获取焦点的时候就会停

  • Android使用TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可.而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主

  • Android TextView实现跑马灯效果的方法

    本文为大家分享一个非常简单但又很常用的控件,跑马灯状态的TextView.当要显示的文本长度太长,又不想换行时用它来显示文本,一来可以完全的显示出文本,二来效果也挺酷,实现起来超级简单,所以,何乐不为.先看下效果图: 代码实现 TextView自带了跑马灯功能,只要把它的ellipsize属性设置为marquee就可以了.但有个前提,就是TextView要处于被选中状态才能有效果,看到这,我们就很自然的自定义一个控件,写出以下代码: public class MarqueeTextView ex

  • android TextView实现跑马灯效果

    本文实例为大家分享了android TextView跑马灯效果的具体代码,供大家参考,具体内容如下 一.要点 设置四个属性 android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" 直接在xml中使用 <TextView android:layout_

  • Android自定义TextView跑马灯效果

    Android自带的跑马灯效果不太好控制,还必须要满足条件才能有效果,而且速度不受控制.前面我的博客中有一篇就是用Android自带的跑马灯效果的,但是基于不同的使用效果,这里在网上找到了一个更好的方法.沿用了作者的一些方法,但是添加了更好的扩展功能,和大家一起分享.这里面有控制往左往右两个方向的实现. 1.首先是简单的布局main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • 自定义TextView跑马灯效果可控制启动/停止/速度/焦点

    Android自带的跑马灯效果不太好控制,不能控制速度,不能即时停止和启动,而且还受焦点的影响蛋疼不已.由于项目需求需要用的可控制性高的跑马灯效果,所以自己写了一个自定义的TextView 注意:在布局文件引用本view时,paddingLeft,paddingRigh都必须为0dp,需要增加这两个属性的,大家可以自行修改代码. android:ellipsize="marquee" android:singleLine="true" 这两个属性也要加上 复制代码

  • Android自定义图文跑马灯效果

    之前的需求是用FlipperView来实现上下翻动效果,但是发现数据有点长会造成一屏幕放不下三条数据,后来改为跑马灯,但是只有文字的跑马灯TextView自己就有,但是要求文字后面带一个小图标怎们办呢? (1).MainActivity.java: public class HomeFragment extends BaseFragment { private MarqueeScroll mMarqueeScroll; private int[] name_tv = {R.id.name_tv1

  • Android基于TextView属性android:ellipsize实现跑马灯效果的方法

    本文实例讲述了Android基于TextView属性android:ellipsize实现跑马灯效果的方法.分享给大家供大家参考,具体如下: Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须超出TextView大小 3.TextView要获得焦点才能滚动 XML代码: android:ellipsize="marquee", andro

  • Android实现垂直跑马灯效果

    在我们开发过程中,跑马灯这个功能非常实用的,在实现这个功能的时候,这个时候我们通常需要找demo来实现这个方法,我从github上面找到这个demo感觉很好用,所以就要实现了这个功能喽MarqueeView,看这个工具类,因为我找这个类的时候是没有点击事件的,所以我给它加了一个点击事件,看这个工具类 public class MarqueeView extends ViewFlipper { private Context mContext; private List<String> noti

  • Android用TextView实现跑马灯效果代码

    目录 [前言] 一.新手设置跑马灯效果 [关键点讲解] [总结] 二.高端玩家设置跑马灯效果 三.延伸阅读 总结 [前言] 在Textview设置的宽度有限,而需要显示的文字又比较多的情况下,往往需要给Textview设置跑马灯效果才能让用户完整地看到所有设置的文字,所以给TextView设置跑马灯效果的需求是很常见的 一.新手设置跑马灯效果 1.先在xml中给Textview设置好对应的属性 <TextView android:id="@+id/tv" android:layo

  • Android自定义textview实现竖直滚动跑马灯效果

    本文实例为大家分享了Android自定义textview实现跑马灯效果的具体代码,供大家参考,具体内容如下 xml布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.c

随机推荐