栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android自定义TextView跑马灯效果

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android自定义TextView跑马灯效果

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

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

 
 
 
  

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() >= (textWidth)) { 
currentScrollX = -(this.getWidth());// 当前出现的位置 
} 
postDelayed(this, 1); 
} 
 
 
// 开始滚动 
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(); 
} 
} 


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/158598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号