Android 文本滚动效果的几种实现方式(一)
来源:互联网 发布:云计算行业发现趋势 编辑:程序博客网 时间:2024/06/03 21:24
最近项目用到文本滚动通知效果,首先想到了跑马灯可是限制太多不适用,就自己写了两种实现方式,本篇来介绍第一种滚动方式。
1.通过scrollTo()方法来实现。
这个方法原理是,需要一个承载TextView的父控件,我这里用到得是一个自定义RelativeLayout,在里面添加一个TextView。通过父控件RelativeLayout的不断scrollTo()方法,来实现TextView滚动效果。
重写自定义RelativeLayout的onDraw方法,在onDraw调用scrollTo滑动效果会比较流畅,下面是代码。
/** * 自定义RelativeLayout构造方法,把textview加入布局中 * @param context * @param width * @param height */ public PlayNotifyInnerWindow(Context context) { super(context); mContext = context; // TODO Auto-generated constructor stub this.setLayoutParams(newLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));//设置大小 LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.paly_notiry_text, null); tv = (TextView) view.findViewById(R.id.tv_notif); this.addView(view);//添加文本 }
下面是文本样式设置:
if (!"".equals(left)) { // layoutParams.leftMargin=Integer.parseInt(left); layoutParams.setMargins(Integer.parseInt(left),0, 0, 0);//设置边距 } if (!"".equals(right)) { layoutParams.setMargins(0, 0, Integer.parseInt(right), 0);//设置边距 } if (!"".equals(left) && !"".equals(right)) { layoutParams.setMargins(Integer.parseInt(left), 0,//设置边距 Integer.parseInt(right), 0); } if (!"".equals(bottom)) { layoutParams.topMargin = Integer.parseInt(bottom);//设置边距 } else { layoutParams.topMargin = 0; } msp = new SpannableString(content); if (isB == true) {//是否加粗 tv.getPaint().setFakeBoldText(true); } else { tv.getPaint().setFakeBoldText(false); } if (isI == true) {//是否斜体 tv.getPaint().setTextSkewX(-0.5f); } else { tv.getPaint().setTextSkewX(0f); } if (isU == true) {//是否有下划线 tv.getPaint().setUnderlineText(true); } else { tv.getPaint().setUnderlineText(false); } //播放速度 if (mspeed != null && !"".equals(mspeed)) { speed = Integer.parseInt(mspeed); } else { speed = 5; } //循环次数 if (cicrle != null && !"".equals(cicrle)) { cicle = Integer.parseInt(cicrle); } else { cicle = 10000; } //背景颜色 if (bgColor != 0 && isTran == false) { this.setBackgroundColor(bgColor); } else { this.setBackgroundColor(Color.TRANSPARENT); } if (bgZiti != 0) { // 设置字体前景色 msp.setSpan(new ForegroundColorSpan(bgZiti), 0, content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置前景色为洋红色 } else { msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 0, content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 正常 } //字体大小 if (!"".equals(zihao)) { fontSize = Util.px2sp(mContext, Util.sp2px(mContext, Integer.parseInt(zihao)) * rate); tv.setTextSize(fontSize); } else { fontSize = Util .px2sp(mContext, Util.sp2px(mContext, 24) * rate); tv.setTextSize(fontSize); } if (!"".equals(ziti)) { Typeface tf = Util.choiceTypeface(ziti); tv.setTypeface(tf);// 设置字体 } else { msp.setSpan(new TypefaceSpan("monospace"), 0, content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } //设置文本,可设置有样式文本 tv.setText(msp); //自定义文字样式,立体,悬浮,碑刻,套色 FontEffects mFontEffects = new FontEffects(tv, null); mFontEffects.setFontEffects(effect); i = 0;//循环次数标志位 this.startScroll();//开始滚动
// 开始滚动 public void startScroll() { this.setVisibility(View.VISIBLE); isStop = false; invalidate();//重新绘制(执行onDraw) }
@Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (!isStop) { currentScrollX -= speed;// 滚动速度 scrollTo(currentScrollX, 0); if (getScrollX() <= -(this.getWidth())) {// 如果滚动位置大于控件宽度说明已经滚动出去 currentScrollX = textWidth;// 初始化位置 // return; if (i >= cicle - 1) {// 判断是否到达循环次数 // reach max times stopScroll(); // return; } else { i++; } } invalidate(); } }//停止滚动public void stopScroll() { isStop = true; this.setVisibility(View.GONE); // scrollTo(0, 0); }
以上就是第一种方法的实现,这种方法单独滚动没有问题,但是我们这个项目有很多动画是自定义控件重写OnDraw所以会有动画冲突,出现卡顿现象。所以有了后面两种方法。
1 0
- Android 文本滚动效果的几种实现方式(一)
- Android 文本滚动效果的几种实现方式(二)
- (android实战)实现【关于我们】功能(textview的文本样式几种实现方式)
- Android 单击文本变色效果实现的2中方式
- android tv 实现颜色条滚动效果(第二种方式)
- 文字滚动的几种效果及实现方法
- 文本滚动效果 [已实现]
- WindowsPhone8 实现文本滚动效果
- Android 实现悬浮的几种方式(一)AppBarLayout+PtrFrameLayout
- Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一)
- Android中的坐标体系与实现滑动效果的几种方式
- .NET 实现并行的几种方式(一)
- Ext.LoadMask遮罩的效果几种实现方式
- Android实现滚动效果
- Android Menu的几种实现方式
- Android菜单栏的几种实现方式
- Android Menu的几种实现方式
- Android定时器实现的几种方式
- iPhone导出照片到电脑
- 追剧补番达人必备五款APP排行
- 系统宕机后,eclipse 无法启动tomcat -提示问题Removing obsolete files from server
- 服务端AppWeb与PC管理端配合使用的有关说明
- 微信公众帐号开发教程第16篇-应用实例之历史上的今天
- Android 文本滚动效果的几种实现方式(一)
- 代码注入的三种方法
- Android 5.0 内置第三方apk
- thinking in programing
- Python操作Redis之设置key的过期时间
- 博客第一篇
- Unity3D 导入脚本のAnimation动画切割
- android studio 常遇错误,界面,Gradle详细讲解
- Objc中block的实现