android滚动TextView设计
来源:互联网 发布:2017全国火灾数据统计 编辑:程序博客网 时间:2024/05/22 05:11
一、创建一个类:
package com.liushui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class AutoScrollTextView extends TextView implements OnClickListener {
public final static String TAG = AutoScrollTextView.class.getSimpleName();
private float textLength = 0f;//文本长度
private float viewWidth = 0f;
private float step = 0f;//文字的横坐标
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 = "";//文本内容
public AutoScrollTextView(Context context) {
super(context);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
private void initView()
{
setOnClickListener(this);
}
public void init(WindowManager windowManager)
{
paint = getPaint();
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) {
canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
if(!isStarting)
{
return;
}
step += 1;//1为文字滚动速度。
if(step > temp_view_plus_two_text_length)
step = textLength;
invalidate();
}
@Override
public void onClick(View v) {
if(isStarting)
stopScroll();
else
startScroll();
}
}
二、调用类
package com.liushui;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.liushui.R;
public class Liushui extends Activity
{
AutoScrollTextView auto;
public TextView t1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
auto = (AutoScrollTextView)findViewById(R.id.TextViewNotice);
auto.init(getWindowManager());
auto.startScroll();
}
}
三、 xml文档设计(有点特殊)
<com.liushui.AutoScrollTextView
android:id="@+id/TextViewNotice"
android:layout_height="40sp"
android:layout_width="fill_parent"
android:text="@string/su"
android:inputType="text"
android:textColor="#FFFF0000"
android:textSize="40sp"
android:textStyle="bold"
xmlns:android="http://schemas.android.com/apk/res/android">
</com.liushui.AutoScrollTextView>
四、疑问
为什么文字都是黑色的?android:textColor改不了!
- android滚动TextView设计
- Android TextView滚动效果
- TextView 滚动效果 android
- android textview 滚动条
- android textview 手动滚动
- android-----------textview -------------滚动
- android textview 水平滚动
- Android TextView滚动效果
- Android TextView文字滚动
- android textView 上下滚动
- Android Textview的滚动
- Android textView 滚动
- Android金钱滚动效果-滚动的textView
- Android - 自动文字滚动TextView
- Android TextView 垂直自动滚动
- Android TextView实现滚动效果
- Android TextView横向滚动问题
- Android TextView的双向滚动
- zedboard系列-2、原装SD卡程序测试
- Allen 学习 cocos2dx (一) 创建游戏项目 Hello World
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录
- typeof在kernel中的使用——C语言的“编译时多态”
- 第六周作业1——利用哈夫曼编码英文字母表
- android滚动TextView设计
- cocos2dx坐标系及节点尺寸
- 【蓝桥杯练习系统】 入门训练 序列求和
- android adb shell 命令大全
- CentOS-6.5-x86_64 最小化安装,共安装了多少个软件包,是那些软件包?
- HDU4514
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- android中Invalidate和postInvalidate的区别
- 数据结构代码