- 浏览: 63771 次
- 性别:
- 来自: 湖南
最新评论
-
Neacy_Zz:
有些Android也可以显示的出来。
Android 将一张CMYK模式的图片转换成RGB模式的图片 -
hold_on:
AsyncTask 2.3 和 4.0稍有不同
Android从零开始(十五)
N久没有跟新了,最近做的银行项目中的一个自定义控件(用于状态栏欢迎语句+柜员信息的滚动,简单点说就是TextView跑马灯效果)
layout中引用:
源码下载请戳这里:
package com.hacheng.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.ViewConfiguration; import android.view.animation.DecelerateInterpolator; import android.widget.Scroller; import android.widget.TextView; public class ScrollTextView extends TextView { private Scroller mScroller; private int mTouchSlop; private int mMinimumVelocity; private int mMaximumVelocity; private float mLastMotionY; private boolean mIsBeingDragged; private VelocityTracker mVelocityTracker; private int mActivePointerId = INVALID_POINTER; private static final int INVALID_POINTER = -1; public ScrollTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public ScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public ScrollTextView(Context context) { super(context); initView(); } private void initView() { final Context cx = getContext(); // 设置滚动减速器,在fling中会用到 mScroller = new Scroller(cx, new DecelerateInterpolator(0.5f)); final ViewConfiguration configuration = ViewConfiguration.get(cx); mTouchSlop = configuration.getScaledTouchSlop(); mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } /** * 此方法为最后机会来修改mScrollX,mScrollY. 这方法后将根据mScrollX,mScrollY来偏移Canvas已实现内容滚动 */ @Override public void computeScroll() { super.computeScroll(); final Scroller scroller = mScroller; if (scroller.computeScrollOffset()) { // 正在滚动,让view滚动到当前位置 int scrollY = scroller.getCurrY(); final int maxY = (getLineCount() * getLineHeight() + getPaddingTop() + getPaddingBottom()) - getHeight(); boolean toEdge = scrollY < 0 || scrollY > maxY; if (scrollY < 0) scrollY = 0; else if (scrollY > maxY) scrollY = maxY; /* * 下面等同于: mScrollY = scrollY; awakenScrollBars(); //显示滚动条,必须在xml中配置。 * postInvalidate(); */ scrollTo(0, scrollY); if (toEdge) // 移到两端,由于位置没有发生变化,导致滚动条不显示 awakenScrollBars(); } } public void fling(int velocityY) { final int maxY = (getLineCount() * getLineHeight() + getPaddingTop() + getPaddingBottom()) - getHeight(); mScroller.fling(getScrollX(), getScrollY(), 0, velocityY, 0, 0, 0, Math.max(0, maxY)); // 刷新,让父控件调用computeScroll() invalidate(); } @Override public boolean onTouchEvent(MotionEvent ev) { /* * 事件处理方式:先自己处理后交给父类处理。 PS:方式不同,可能导致效果不同。请根据需求自行修改。 */ boolean handled = false; final int contentHeight = getLineCount() * getLineHeight(); if (contentHeight > getHeight()) { handled = processScroll(ev); } return handled | super.onTouchEvent(ev); } private boolean processScroll(MotionEvent ev) { boolean handled = false; if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); // 帮助类,用来在fling时计算移动初速度 final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: { if (!mScroller.isFinished()) { mScroller.forceFinished(true); } mLastMotionY = ev.getY(); mActivePointerId = ev.getPointerId(0); mIsBeingDragged = true; handled = true; break; } case MotionEvent.ACTION_MOVE: { final int pointerId = mActivePointerId; if (mIsBeingDragged && INVALID_POINTER != pointerId) { final int pointerIndex = ev.findPointerIndex(pointerId); final float y = ev.getY(pointerIndex); int deltaY = (int) (mLastMotionY - y); if (Math.abs(deltaY) > mTouchSlop) { // 移动距离(正负代表方向)必须大于ViewConfiguration设置的默认值 mLastMotionY = y; /* * 默认滚动时间为250ms,建议立即滚动,否则滚动效果不明显 或者直接使用scrollBy(0, deltaY); */ mScroller.startScroll(getScrollX(), getScrollY(), 0, deltaY, 0); invalidate(); handled = true; } } break; } case MotionEvent.ACTION_UP: { final int pointerId = mActivePointerId; if (mIsBeingDragged && INVALID_POINTER != pointerId) { final VelocityTracker velocityTracker = mVelocityTracker; velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); int initialVelocity = (int) velocityTracker .getYVelocity(pointerId); if (Math.abs(initialVelocity) > mMinimumVelocity) { fling(-initialVelocity); } mActivePointerId = INVALID_POINTER; mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } handled = true; } break; } } return handled; } }
layout中引用:
<com.hacheng.view.ScrollTextView android:id="@+id/scrollview" android:layout_width="750px" android:layout_height="48px" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:lines="1" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" android:text="欢迎光临中国某某银行!柜员号:25645 地区号:658978" android:textSize="38dp" > </com.hacheng.view.ScrollTextView>
源码下载请戳这里:
- ScrollTextView.zip (2 KB)
- 下载次数: 7
发表评论
-
Android自定义控件--3(刷新动画)
2014-02-26 11:14 977一个乐动力的刷新动画 package com.example. ... -
Android自定义控件--2(数字签名)
2014-02-26 11:08 973客户信息交互用到的一个数字签名,保存的是bmp图片(我那会在P ... -
Android 将一张CMYK模式的图片转换成RGB模式的图片
2013-06-25 17:32 2310Android系统是不能够显示打印模式(CMYK)的图片的。所 ... -
Android TextToSpeech语音播放文本
2013-06-25 17:17 1902步骤一、初始化 package com.example.spe ... -
Android连接电脑eclipse无法识别=解决办法
2013-05-23 09:25 22221、方法一:“我的电脑”-->“属性”-->“设备 ... -
Android BaseAdapter如何获得每一项并添加按钮事件
2013-05-21 15:11 3769package com.hangcheng; impor ... -
Android的VideoView如何循环播放
2013-05-15 14:01 4861package com.hangcheng; impor ... -
Android如何获取asset目录下所有文件的路径
2013-05-15 09:48 7788package com.hangcheng.util; ... -
Android--WebView+HTML+Javascript
2013-04-09 17:17 1773知识点:android的WebView控件加载HTML并通过j ... -
VideoView重绘
2013-04-01 23:39 1383知识点:Android中的VideoView控件默认情况下是不 ... -
Android从零开始—多媒体(二十二)
2013-03-06 21:43 1064知识点:音乐播放、录音、播放视频、录像、拍照 步骤一、主界面 ... -
Android从零开始—监听广播BroadcastReceiver(二十一)
2013-03-05 10:17 2124知识点:电话拒接+短息 ... -
Android从零开始—电话+短信(二十)
2013-03-05 10:03 1162知识点:系统电话号码和短信的获取(最好用真机,模拟器上木有电话 ... -
Android从零开始(十九)
2013-02-27 10:35 1009知识点:back键的处理(有时候我们可能会不小心按了回退键,但 ... -
Android从零开始(十八)
2013-02-27 10:24 893知识点:菜单(menu) 步骤一、创建菜单项(核心代码如下) ... -
Android从零开始(十七)
2013-02-27 10:09 1018知识点:抽屉(SlidingDrawer) 先看一下抽屉打开 ... -
Android从零开始(十六)
2013-02-26 19:43 903知识点:闪屏(通常在 ... -
Android从零开始(十五)
2013-02-26 18:32 1149知识点:异步任务AsyncTa ... -
Android从零开始(十四)
2013-02-26 17:16 881知识点:TabHost选项卡之 ... -
Android从零开始(十三)
2013-02-23 22:57 867知识点:TabHost 效果图: 工程目录结构: ...
相关推荐
总的来说,Android的TextView跑马灯效果是通过结合XML布局属性和代码控制实现的,它为展示长文本提供了灵活的解决方案,特别是在有限的空间内。理解和掌握这个功能对于Android开发者来说非常有用,可以提升用户体验...
"android自定义横向跑马灯TextView"就是一个典型的示例,它允许文字在一个视图内不断滚动,模拟LED显示屏上的跑马灯效果。这种效果通常用于显示通知、提示信息或者标题,即使只有一个字符也能实现滚动。 跑马灯效果...
本资源"Android高级应用源码-跑马灯效果MarqueTextView textview 循环 跑马灯效果.zip"提供了一个实现这一效果的示例,主要涉及到自定义控件MarqueTextView的使用。下面将详细介绍跑马灯效果的原理以及如何通过...
"Android自定义TextView跑马灯效果" Android 自定义TextView跑马灯效果是指在 Android 平台上通过自定义TextView实现跑马灯滚动效果。下面是关于Android自定义TextView跑马灯效果的知识点: 1. TextView 的跑马灯...
综上所述,这个"Android ListView,TextView跑马灯Demo"展示了如何在ListView的每一项中实现TextView的跑马灯效果。通过正确设置TextView的属性和ListView的焦点管理,我们可以在应用中创建出动态、吸引人的UI元素,...
综上所述,"老罗视频代码textview跑马灯效果"主要涉及的是Android中TextView的跑马灯效果实现,包括XML属性配置、代码逻辑设置以及可能遇到的问题和解决策略。通过理解这些知识点,开发者可以灵活地在自己的应用中...
以上就是关于Android中TextView跑马灯效果的基本介绍和实现方法。通过合理设置属性和编写适当的代码,我们可以创建出满足需求的跑马灯效果。同时,自定义的MarqueeTextView可能会提供更丰富的定制选项,以适应各种...
在Android开发中,自定义控件是提升应用特色和用户体验的...以上就是实现Android自定义TextView跑马灯效果的详细过程。通过这个例子,开发者可以进一步理解Android自定义控件的机制,并将其应用于更多复杂的效果实现。
跑马灯效果在Android中通常是通过自定义View或者对现有控件进行扩展来实现的,而在这个Demo中,我们将重点讨论如何在TextView中实现垂直滚动的效果。 首先,TextView是Android中最基础的文本显示控件,它通常用于...
在Android开发中,自定义控件是提升应用用户体验和实现个性化功能的重要手段。本文将深入讲解如何通过自定义TextView来...通过不断学习和实践,开发者可以更好地掌握Android自定义控件的精髓,提高开发效率和应用质量。
下面将详细解释如何通过继承TextView来创建具有跑马灯效果的自定义控件。 首先,我们需要了解TextView的基本概念。TextView是Android UI布局中的一个基本组件,用于显示文本。它支持多种样式,如字体大小、颜色、...
在Android应用开发中,我们经常会遇到需要展示滚动文字的需求,比如新闻标题的跑马灯效果。在这种场景下,`VerticalMarqueeView`控件就能派上用场。它是一种特殊的视图,允许文本或图像在垂直方向上持续滚动,营造出...
【标题】:“TextView跑马灯效果2” 在Android开发中,TextView是我们常用的一个组件,用于显示文本信息。而“跑马灯”效果则是TextView的一种特殊显示方式,它可以使文本在达到TextView宽度边界后,继续从左侧滚动...
在Android开发中,自定义跑马灯效果是一种常见的UI动态效果,常用于显示滚动文本,如广告栏、通知提示等。跑马灯效果通常是指文本或图片在一个固定区域里不断循环滚动,给人一种视觉上的连续性。本文将深入探讨如何...
至此,我们就创建了一个基本的跑马灯效果的自定义TextView。开发者可以根据需求进一步优化,例如添加动画效果、调整滚动速度、支持暂停和恢复滚动等功能,以满足更复杂的应用场景。 总结来说,创建自定义控件是...
本文将深入探讨“Android-MarqueeView新的里程表式垂直跑马灯”这一基于ViewGroup的自定义控件,以及如何利用它来增强用户界面的交互体验。 首先,"MarqueeView"这个名称来源于电视屏幕滚动文字的术语“跑马灯”,...
- 如果是`TextView`,可以通过设置`android:singleLine="true"`和`android:ellipsize="marquee"`开启跑马灯效果。 - 自定义滚动逻辑时,可以使用`postDelayed`或者`Handler`来定时改变文本的位置,模拟滚动效果。 ...