package com.android;
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 RunBackActivity extends TextView implements OnClickListener {
public final static String TAG = RunBackActivity.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 RunBackActivity(Context context) {
super(context);
initView();
}
public RunBackActivity(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public RunBackActivity(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);
}
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];
}
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();
}
public void onDraw(Canvas canvas) {
canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
if (!isStarting) {
return;
}
step += 0.5;// 0.5为文字滚动速度。
if (step > temp_view_plus_two_text_length)
step = textLength;
invalidate();
}
public void onClick(View v) {
if (isStarting)
stopScroll();
else
startScroll();
}
}
然后在Activity中调用此方法
public class MainActivity extends Activity {
RunBackActivity autoScrollTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
autoScrollTextView = (RunBackActivity)findViewById(R.id.TextViewNotice);
autoScrollTextView.init(getWindowManager());
autoScrollTextView.startScroll();
}
}
在main.xml中设置
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.android.RunBackActivity
android:id="@+id/TextViewNotice"
android:layout_height="30px"
android:layout_width="fill_parent"
android:text="嘿嘿"
android:textColor="#000"
android:inputType="text"
android:background="#EEE"
android:textSize="20px">
</com.android.RunBackActivity>
</LinearLayout>
- 大小: 7.8 KB
分享到:
相关推荐
2. 运行项目,你会看到跑马灯效果开始工作,文本从右向左循环滚动。 五、优化和修改 - 可以添加参数控制滚动方向(左至右或右至左)。 - 如果需要显示更复杂的跑马灯效果,例如同时显示多行文本或图片,可以考虑...
在Delphi中实现透明跑马灯效果涉及到图形用户界面(GUI)编程,特别是与控件、事件处理和自定义绘图相关的技术。跑马灯效果通常是指文本或图像在界面上按照某种方式循环滚动,而透明则涉及到控件的背景处理和颜色...
在这个项目中,我们讨论的是如何在51单片机上实现一个简单的左右跑马灯效果,这是一种常见的LED显示效果,通常用于教学和实验。 跑马灯程序主要涉及到以下几个关键知识点: 1. **硬件连接**:首先,你需要一个51...
jQuery无缝滚动跑马灯效果是一种常见的网页动态展示技术,它利用JavaScript库jQuery的高效特性,为网站添加一种吸引用户注意力的视觉效果。这种效果通常应用于新闻更新、广告展示或者产品介绍等区域,使得信息能够以...
跑马灯效果,通常在移动应用开发中用于显示滚动文本,尤其当文本内容过多无法一次性完全展示时。在iOS开发中,我们可以利用UILabel这一UI组件来实现这种效果。本篇文章将详细探讨如何在iOS中创建跑马灯效果,以及...
要实现跑马灯效果,首先需要在XML布局文件中设置`TextView`的相关属性。关键属性包括: - `android:singleLine="true"`:限制`TextView`只显示一行文本。 - `android:ellipsize="marquee"`:开启跑马灯效果,当...
在这个项目中,我们将深入探讨如何使用MSP430F449来实现LED的单向跑马灯效果和左右交替跑马灯效果。 首先,我们需要了解MSP430F449的基本架构。该芯片拥有强大的16位CPU、丰富的片上存储器、多个I/O端口和多种外设...
此外,如果需要支持不同方向的滚动,例如从右向左,可能需要对滚动逻辑进行调整。 学习自定义View实现跑马灯时,还需要了解Android的动画系统,如ObjectAnimator或者ValueAnimator,它们可以用来平滑地改变文本的...
描述中提到的“好用的插件”,意味着我们可以借助现成的jQuery插件来快速实现跑马灯效果,而无需从零开始编写代码。例如,`jQuery Cycle Plugin`、`Slick Slider`等都提供了丰富的选项和自定义事件,可以方便地调整...
"跑马灯"效果,又称为滚动文字效果,是指当TextView中的文本长度超过控件宽度时,文本会从右向左自动循环滚动,就像跑马灯一样。这个效果在很多场景下都非常实用,比如通知栏消息、应用标题或者广告横幅等。 实现...
在Android开发中,实现跑马灯效果通常会涉及到自定义View或者使用已有的库来达成。跑马灯效果,也称为滚动文字效果,是让用户在有限的显示区域内查看完整信息的一种设计方式,常用于通知栏、标题栏或者广告轮播等...
5. 滑动方向:支持双向滑动,例如从右到左和从左到右。 6. 平滑过渡:使用缓动函数(如ease-in-out)来增加动画的平滑感。 在"Web-Ticker-master"项目中,我们可以进一步研究其代码结构,查看HTML模板、CSS样式表...
jQuery 是一个广泛使用的 JavaScript 库,它为开发者提供了丰富的功能和简洁的API,使得创建跑马灯效果变得更为简便。 jQuery 跑马灯实现的基本原理是通过改变元素的位置或透明度来模拟滚动效果。以下是一些关键...
跑马灯效果则更复杂一些,它涉及到定时器的配置和中断服务程序的编写。在嵌入式系统中,通常使用定时器来产生周期性的中断,然后在中断服务程序中改变LED灯的亮灭顺序,实现灯光的移动效果。在汇编语言中,你需要...
以下是从给定文件中提取的关键代码段,用于实现跑马灯效果: ```vb Public Class Form1 Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick If Label1.Left + Label1...
将自定义的ScrollingTextControl控件添加到你的项目中,通过设置控件属性(如文本、速度、方向)并调用相应的方法,就可以在窗体上看到跑马灯效果。 综上所述,"C#跑马灯效果ScrollingTextControl"项目是一个基于C#...
- 跑马灯效果通常需要改变RecyclerView的滚动方向,使其从右到左或从下到上滚动。 - 自定义LayoutManager时,可能需要重写`scrollVerticallyBy()`或`scrollHorizontallyBy()`方法,控制滚动方向。 6. JAVA版实现...
跑马灯效果则源自传统霓虹灯的滚动展示,它是一种文字或图片从一侧滑动到另一侧,然后消失在视线外,再从另一侧重新出现的效果,营造出一种连续流动的感觉。 实现这些效果的技术基础包括HTML、CSS和JavaScript。...
在iOS开发中,为了创建一个类似跑马灯效果的UILabel,开发者经常需要用到文字滚动功能。这个效果通常是当UILabel中的文本内容超过其显示区域时,文本会自动从一侧滑入另一侧,给人一种持续滚动的感觉。Swift作为苹果...
跑马灯效果是指文字在视图宽度范围内不断循环滚动,给人一种从一端滑动到另一端再返回的视觉体验。在Android中,我们可以使用`TextView`的`android:singleLine`属性配合`android:ellipsize="marquee"`来实现这个效果...