- 浏览: 586623 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (182)
- android/ophone开发完全讲义 (4)
- android常用代码 (6)
- android工具 (9)
- android基础 (40)
- android进阶 (75)
- android经验记录 (3)
- android框架 (2)
- android面经 (5)
- android网络 (5)
- android资讯 (0)
- android资源 (17)
- 生活印象 (3)
- androidNDK (4)
- android开源 (1)
- android性能优化 (1)
- android设计 (2)
- android博客论坛收集 (1)
- android手机用户体验 (1)
- android动画 (1)
- android外文资料 (1)
- 汉字排序 (1)
最新评论
-
小猫咪201:
困惑了很久,终于找到答案了
一个常见的android内存泄露 问题 -
王雪龙:
pixels = dps * (density / 160). ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
Turr:
楼主给力,解决了我遇到的问题
解决ActivityGroup的sub Activity中spinner的WindowManager$BadTokenException的问题 -
boyuan2000cn:
你好,我转载了您的此篇博客,如果有版权问题,请告诉我,谢谢!转 ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
twlkyao:
请教您个问题,如何将drawable对象转换为id类型?
Android中Bitmap, Drawable, Byte,ID之间的转化
普通的TextView可以实现跑马灯,但是只有当焦点在它上面时才有效。 如何做一个自动的跑马灯呢?
第一种:继承TextView,然后重写isFocused()方法就可以了,简单!
Java代码:
- import android.content.Context;
- import android.util.AttributeSet;
- import android.widget.TextView;
- /**
- * 单行文本跑马灯控件
- * @author admin
- *
- */
- public class ScrollForeverTextView extends TextView {
- public ScrollForeverTextView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- public ScrollForeverTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public ScrollForeverTextView(Context context, AttributeSet attrs,int
defStyle) {
- super(context, attrs, defStyle);
- }
- @Override
- public boolean isFocused() {
- return true;
- }
- }
使用时同TextView一样:
Java代码:
- <com.ql.view.ScrollForeverTextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textSize="30px"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:marqueeRepeatLimit="marquee_forever"
- android:textColor="@color/red"
- android:text="1234567890wwwwwwwwwwwwwwwwwwwwww1234567890"
- android:focusable="true"
- />
第2种:还是继承TextView,重写onDraw(),在onDraw中不停的重绘。
Java代码:
- 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;
- /**
- * 单行文本跑马灯控件
- * @author admin
- */
- 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 CharSequence text = "";// 文本内容
- private float speed = 0.5f;
- private int textColor=0xFF000000;
- public int getTextColor() {
- return textColor;
- }
- public void setTextColor(int color) {
- this.textColor = color;
- }
- public float getSpeed() {
- return speed;
- }
- public void setSpeed(float speed) {
- this.speed = speed;
- }
- 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(float width/*WindowManager windowManager*/) {
- text=super.getText();
- paint = super.getPaint();
- // Paint paint=new Paint();
- text = getText().toString();
- textLength = paint.measureText(text.toString());
- // viewWidth = getWidth();
- // if (viewWidth == 0) {
- // if (windowManager != null) {
- // Display display = windowManager.getDefaultDisplay();
- // viewWidth = display.getWidth();
- // }
- // }
- viewWidth=width;
- step = textLength;
- temp_view_plus_text_length = viewWidth + textLength;
- temp_view_plus_two_text_length = viewWidth + textLength * 2;
- y = getTextSize() + getPaddingTop();
- paint.setColor(textColor);
- }
- @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) {
- // super.onDraw(canvas);
- canvas.drawText(text,0,text.length(), 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)
- stopScroll();
- else
- startScroll();
- }
- }
使用:
Java代码:
- marquee = (AutoScrollTextView) findViewById(R.id.marquee);
- //
marquee.setText(String.format(getResources().getString(R.string.marquee0),Consts.termno,"2010-12-28"));
- marquee.setText("上证指数3000.15 6.81(0.37%)深圳成指3000.15 6.81(0.37%)");
- // marquee.setTextColor(0xffff0000);//注意:颜色必须在这里设置,xml中设置无效!默认黑色。
- //如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(width)方法,重新进行初始化和相关参数的计算。
- marquee.setSpeed(1.5f);
- marquee.init(width);//width通常就是屏幕宽!
- marquee.startScroll();
复制代码
第三种方法:设置其对应的layout中的:addStatesFromChildren
= “true”.使用其获得焦点时有跑马灯的效果。
src:http://www.eoeandroid.com/thread-78365-1-1.html
发表评论
-
Android 检查当前是否已经连接上 Internet
2012-02-27 09:28 1java代码: 1 ConnectivityManager ... -
对ContentProvider中getType(Uri uri)和android.intent.category.DEFAULT的理解
2012-02-27 09:21 1638学习了ContentProvider,想做个通讯录,结果 ... -
Android ContentProvider的介绍(很详细)
2012-02-21 17:46 139696一、ContentProvider的概念 Content ... -
一个常见的android内存泄露 问题
2012-02-20 16:11 4946最近在公司看一个算比较大的android项目的源码, ... -
一个常见的android内存泄露 问题
2012-02-20 16:10 0最近在公司看一个算比较大的android项目的源码,发 ... -
Android网络电台的一种实现方案
2012-02-20 15:12 3681随着电子产品的飞速 ... -
NotificationManager和Notification的使用总结
2012-02-16 15:55 1143这几天一直在修改twigee的源代码,其中一个要加入的 ... -
android 如何判断程序是否在前台运行
2012-02-16 15:31 5457private boolean isTopActivit ... -
Android Intent和PendingIntent的区别详细分析
2012-02-16 14:08 1571刚才一个例子中用到了PendingIntent,与之前学过的I ... -
编码问题(UTF-8、gb2312、unicode)
2012-02-14 09:38 1961相信大家很多人跟我一样,对于编码一直感觉云山雾罩,说知道吧?就 ... -
关于androidSDK登录时出现oauth2.0空白页的BUG
2012-02-09 16:21 1430在RenrenListenerFactory中,line 12 ... -
java中yield(),sleep()以及wait()的区别
2012-01-31 18:41 959往往混淆了这三个函数的使用。 从操作系统的角度讲, ... -
Toast大全(五种情形)建立属于你自己的Toast
2012-01-29 17:23 1599Toast用于向用户显示一些帮助/提示。下面我做了5中效果 ... -
Android主流屏幕分辨率介绍
2012-01-18 14:45 1423对于Android游戏开发我们不得不像iPhone那样思 ... -
关于混淆外包jar包出错的解决方法
2012-01-18 11:30 1797-optimizationpasses 5-do ... -
新浪微博SDK
2011-12-28 16:38 1199DEMO程序:http://code.google.co ... -
Android中自定义Dialog外形,去除黑底和白色边框
2011-12-08 16:29 7472在做Android开发中经常会使用到自定义样式的Dialo ... -
汉字排序
2011-12-07 09:44 1096Comparator comparator = Coll ... -
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
2011-11-29 19:29 13654在Android中,TextView是我们最常用的用来显示文本 ... -
屏幕分辨率适配
2011-10-19 18:55 3140屏幕分辨率:1024x600 d ...
相关推荐
Android提供了多种动画库,如Animation、ValueAnimator和ObjectAnimator,可以用来实现跑马灯的滚动效果。这里我们可以选择ValueAnimator,通过设置其动画时长和更新回调,不断改变文本的绘制起点,从而实现连续滚动...
在Android应用开发中,"跑马灯图片展示"是一种常见的动态效果,通常用于广告轮播、通知滚动等场景。跑马灯效果通过不断移动图片或文字来实现视觉上的连续滚动,给用户带来新颖的交互体验。本文将详细介绍如何利用`...
`TextView`是Android中用于显示文本的基本控件,它支持多种样式和行为,其中之一就是跑马灯滚动。 1. **XML布局**: 在你的布局XML文件中,创建一个`TextView`并设置以下属性来开启跑马灯效果: ```xml ...
在Android开发中,实现"ImageView图片循环跑马灯效果"是一种常见的动态UI设计,它能够吸引用户的注意力并增强用户体验。跑马灯效果通常指的是图片在水平或垂直方向上连续滚动展示,给人一种动态循环的感觉,类似于...
MarqueeView-master可能是一个开源的Android库,专门为开发者提供多种跑马灯效果。这类库通常包含多个自定义View,每个View都实现了不同的滚动动画。它们可能提供了更丰富的API,如设置滚动速度、方向、停顿时间等...
跑马灯的实现方式多种多样,常见的有CSS3动画、JavaScript、HTML5 Canvas等。在这个特定的源码中,我们可能会看到以下关键知识点: 1. **JavaScript基础**:跑马灯效果的实现主要依赖于JavaScript,因为它提供了...
在Android中,跑马灯效果可以通过多种方式实现,包括使用TextView的marquee属性、自定义View以及第三方库。下面,我们将详细讨论这些方法。 1. **TextView的marquee属性**: Android系统内置的TextView组件支持...
在给定的标题和描述中,我们关注的是如何将RecyclerView实现上下自动无限滚动的效果,类似于跑马灯的视觉效果。这个效果在很多应用中都可以看到,比如广告轮播、通知提示等。 首先,我们要明白这种效果的实现原理。...
这种效果可以使用多种方法实现,但这里我们关注的是利用LinearLayout结合动画来创建跑马灯。以下是一个详细的步骤介绍: 1. **LinearLayout基础知识**: LinearLayout是Android布局管理器之一,它允许你将子视图...
而"安卓Android源码——ImageView图片循环跑马灯的效果"则是一个关于如何实现ImageView中动态、循环展示图片效果的示例项目。这个项目可能包含了自定义View、动画、线程控制等多方面的知识点。 1. 自定义View:为了...
在Android开发中,"跑马灯"是一种常见的UI效果,通常用于显示滚动的文字或图标,类似于LED显示屏的效果。本教程将深入探讨如何自定义TextView来实现这一功能,并且能够调节跑马灯的速度,即使文字长度小于一行也能...
总之,要实现ImageView的跑马灯效果,开发者需要掌握Android的动画系统、视图滚动机制、数据管理和定时器应用等核心技能。通过解析提供的源码,我们可以学习到如何将这些技术巧妙地结合起来,打造出一款具有吸引力的...
**Android 跑马灯**,也称为滚动文字或走马灯效果,是Android开发中常见的一种动画效果,常用于通知栏、广告展示或者界面标题的动态显示。它通过不断移动文字来模拟一种循环滚动的感觉,使用户可以阅读超出屏幕范围...
这个资源包"适合初学者的UI界面"提供了一个绝佳的学习平台,它包含了三种不同的跑马灯实现方式、多种页面跳转方法以及事件监听的实践案例。 首先,我们来了解一下跑马灯效果。跑马灯,又称滚动字幕或走马灯,是一种...
跑马灯效果可以通过多种编程语言和技术来实现,例如在Android开发中,我们可以使用自定义View或者特定的库来创建。"AnimTextView"这个文件名可能表示这是一个专门用于动画文本显示的自定义TextView类。下面将详细...
在Java中,跑马灯效果可以通过多种方式实现,比如使用Thread线程来控制动画的循环滚动,或者利用Handler和Runnable对象来定时更新界面。以下将详细解释如何通过这两种方法来创建跑马灯效果。 1. **使用Thread和...
在Android开发中,跑马灯效果通常用于展示滚动文本,比如通知消息或者广告标语。这种效果可以通过多种方式实现,其中一种就是使用`ViewGroup`配合动画。本篇将详细讲解如何利用`ViewGroup`和动画来创建一个自定义的...
同时,对于复杂的跑马灯需求,如带有图片或多种元素的组合,可能需要结合`RecyclerView`等更强大的视图组件来实现。 总的来说,跑马灯是一种动态显示文本的机制,通过HTML的`<marquee>`标签或Android中的自定义视图...
为了使跑马灯效果立即启动,通常需要在`Activity`的`onCreate()`方法中调用`requestFocus()`,并确保`TextView`的父容器允许其获得焦点。 最后,需要注意的是,跑马灯效果在某些特定条件下可能不会自动启动,比如当...
9. **库的使用**: 在实际开发中,可能有现成的库如Android Carousel View或ARMarqueeView等可以帮助快速实现跑马灯效果。使用这些库可以节省开发时间,但同时也需关注库的维护状态和兼容性。 10. **测试与调试**: ...