android 里面跑马灯效果一般都是当行显示不全的情况下才会有跑马灯效果,当一行能显示全的情况下,跑马灯是没有效果的。前几天ui要一效果,希望一行能显示全的情况下也能出现跑马灯效果,这样更醒目。

public class RunTextView extends TextView implements OnClickListener {
public final static String TAG = CustomTextView.class.getSimpleName();private float textLength = 0f;// 文本长度
private float viewWidth = 0f;
private float step = 0f;// 文字的横坐标
private final float SPEED = 1.5f; // 跑马灯速度 值越大,越快
private float y = 0f;// 文字的纵坐标
private float temp_view_plus_text_length = 0.0f;// 用于计算的临时变量
private float temp_view_plus_two_text_length = 0.0f;// 用于计算的临时变量
public boolean isStarting = false;// 是否开始滚动
private Paint paint = null;// 绘图样式
private String text = "";// 文本内容
private Context context;
public RunTextView (Context context) {
super(context);
this.context = context;
initView();
}
public RunTextView (Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView();
}
public RunTextView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
initView();
}
/**
* 初始化控件
*/
private void initView() {
setOnClickListener(this);
}
/**
* 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下
*/
public void init(WindowManager windowManager) {
paint = getPaint();
paint.setColor(context.getResources().getColor(R.color.notice_text_color));  //设置文字颜色
text = getText().toString();
textLength = paint.measureText(text);
viewWidth = getWidth();
if (viewWidth == 0) {
if (windowManager != null) {
Display display = windowManager.getDefaultDisplay();
viewWidth = display.getWidth();
}
}
step = textLength;
temp_view_plus_text_length = viewWidth + textLength;
temp_view_plus_two_text_length = viewWidth + textLength * 2;
y = getTextSize() + getPaddingTop();
}@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.step = step;
ss.isStarting = isStarting;
return ss;
}@Override
public void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
step = ss.step;
isStarting = ss.isStarting;
}public static class SavedState extends BaseSavedState {
public boolean isStarting = false;
public float step = 0.0f;
SavedState(Parcelable superState) {
super(superState);
}@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeBooleanArray(new boolean[] { isStarting });
out.writeFloat(step);
}public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {public SavedState[] newArray(int size) {
return new SavedState[size];
}@Override
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
};private SavedState(Parcel in) {
super(in);
boolean[] b = null;
in.readBooleanArray(b);
if (b != null && b.length > 0){
isStarting = b[0];
step = in.readFloat();
}
}
/**
* 开始滚动
*/
public void startScroll() {
isStarting = true;
invalidate();
}
/**
* 停止滚动
*/
public void stopScroll() {
isStarting = false;
invalidate();
}@Override
public void onDraw(Canvas canvas) {
if (text != null) {
canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
}
if (!isStarting) {
return;
}
step += SPEED;
if (step > temp_view_plus_two_text_length){
step = textLength;
invalidate();
}
@Override
public void onClick(View v) {
if (isStarting){
startScroll();
}
}}}
stopScroll();
}else{
}调用方式:
RunTextView noticeText;
..... // findViewById
noticeText.setText(result.getNotice());
//每次重新设置文字都需要重新调用一下下面的这些代码
noticeText.init(getActivity().getWindowManager());
noticeText.startScroll();
noticeText.setEnabled(false);

android 跑马灯 文字一行能显示全也能跑马灯相关推荐

  1. android多行文字正中间显示,Android自定义View五(绘制文本大小、多行多列居中)...

    一.绘制文本 在Canvas中绘制文本,使用前面文章的坐标系 1.drawText的几种方法 public void drawText (String text, float x, float y, ...

  2. android afinal 图片,android中使用afinal一行代码显示网络图片

    public class DemoActivity extends FinalActivity { @ViewInject(id=R.id.imageView) ImageView imageView ...

  3. css如何让文字不换行,css如何让文字不换行显示?

    在CSS中,可以通过white-space属性来实现文字不换行显示:只要将white-space属性的值为nowrap就可强制文字不换行. white-space属性指定元素内的空白怎样处理.它有以下 ...

  4. div css每行文字显示一半 同时文字字体重叠显示不全解决方法

    CSS DIV布局中出现单行或多行文字的每行文字内容不能显示全,上下行文字有一点点重叠现象,文字字体只显示一半解决方法,在低版本IE特别明显文字字体显示不全,在谷歌浏览器等高版本IE浏览器测试还好些. ...

  5. android 文字滚动组件,Android textview 跑马灯文字滚动效果

    设置如下TextView控件文件的XML: android:id="@+id/textview" android:layout_width="match_parent&q ...

  6. android朋友圈发文字换行,朋友圈发文字怎么才显示全文 多按几次换行(大概10次左右...

    导语:说到朋友圈,大家应该都熟悉,有朋友问怎么在朋友圈发一句话.,还有人想问朋友圈发文字怎么才显示全文,这到底是咋回事?事实上朋友圈发文字怎么才能不折叠呢,今天给大家说说朋友圈发文字怎么才显示全文,希 ...

  7. Python经典例题:跑马灯文字效应

    Python经典例题:跑马灯文字效应 跑马灯文字效应是Python比较经典的例题,编程思想是:首先输入字符串,然后对字符串进行切片,将字符串的第一位数切片,然后将它放到末尾,以此进行无限循环. **注 ...

  8. android button 中文字位置设置,iOS开发-- 设置UIButton的文字显示位置、字体的大小、字体的颜色...

    btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlS ...

  9. android字体显示不全,android 按钮的文字显示不全

    android 按钮的文字显示不全 发布时间:2020-06-19 03:42:34 来源:51CTO 阅读:1424 作者:FergusJ AbsoluteLayout.LayoutParams l ...

最新文章

  1. 不关闭seLinux解决vsftpd服务本地用户不能登录问题(500 OOPS: cannot change directory:/home/***
  2. Spark集群的启动日志
  3. css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
  4. hibernate jpa_使用Hibernate(JPA)一键式删除
  5. Oracle高可用概述(HA与RAC的关系解惑)
  6. stl向量_如何检查C ++ STL中向量中是否存在元素?
  7. mysql查询雇员部门和性别_数据库管理系统MySQL实验
  8. 【STL学习】优先级队列Priority Queue详解与C++编程实现
  9. linux 笔记服务器,Linux服务器 CentOS7.5 操作小笔记
  10. 升级node,老的项目启动不了的解决方法(亲测有效)
  11. Shell脚本学习-阶段六-密钥的批量分发与执行
  12. 用C#读取数码相片的EXIF信息(一)
  13. Eric的日期选择下拉列表小控件
  14. Android Studio:Support Library依赖包的版本号
  15. Android 所遇问题(一)
  16. EMPLOYEE表的创建与查询
  17. BSC-币安智能链主网节点搭建(详细步骤)
  18. 单臂路由之一,单网口软路由实现主路由功能,光猫或交换机剩余网口实现上网功能
  19. 科研试剂半乳糖金刚烷衍生物934591-76-1,5-乙酰氨基-7,8,9-三-O-乙酰基-5-N,4-O-羰基-3,5-二脱氧-2-S-苯基-2-硫代-β-D-甘油-D-半乳-2-吡喃神经氨酸甲酯
  20. 振兴当当,李国庆如何逐鹿中原?

热门文章

  1. PHP开启PATH_INFO
  2. 微软服务器操作系统指什么意思,现代服务器操作系统:你绝对想不到是什么!...
  3. 国内一位开发者开源《程序员做菜指南》,火了!
  4. 55个经典的script代码(转)
  5. excel批量删除sql语句
  6. 如何查询手机是不是翻新机?2分钟看懂教程,学会可自查爱机
  7. SCA思考:“人脸”数据被滥用,谁来负责?
  8. 【观察】华为云:跨越技术落地鸿沟,加速政企智能升级
  9. 矩阵的各种分解: LU分解, QR分解, 特征分解, 对称对角化, 奇异值分解 SVD
  10. java被七整除的数_如何判断一个数可被7整除?