[已删除]
[已删除]
  • 发布:2018-04-28 12:10
  • 更新:2018-04-28 12:10
  • 阅读:2157

自定义View之跑马灯效果

分类:HTML5+

  此控件效果不是很难,不过很适合对于自定义View不熟悉的同学练一练,尤其是里面那隐隐约约的数学计算和分析,还是蛮有一番滋味的,有需要的朋友也可以省点时间直接用了。

  下面来具体说一下实现思路:

  自定义控件属性

  按照控件特性,就能很容易的自定义出来,这里不多解释了,属性如下:

  实现文本展示与滚动

  首先是文本展示,这个很简单,直接在onDraw方法里面调用 drawText(String text, float x, float y, Paint paint)就可以实现,就可以把文本画出来,不过这里面存在个大大的坑,就是这里面的y坐标getHeight() / 2 + textHeight / 2,文本高度计算如果直接调用rect.height()方法获得的值是比实际高度大的,就导致了文本会偏下一点,准确的获取方法为:

  private float getContentHeight() { Paint.FontMetrics fontMetrics = paint.getFontMetrics(); return Math.abs((fontMetrics.bottom - fontMetrics.top)) / 2; }

  下面就是让他滚动起来,实现方式是开启死循环,在很短的时间内,改变xLocation的值,再调用 postInvalidate() 方法重新绘制文本就实现了滚动。

  @Override public void run() { while (isRoll && !TextUtils.isEmpty(content)) { try { Thread.sleep(10); xLocation = xLocation - speed; postInvalidate();//每隔10毫秒重绘视图 } catch (InterruptedException e) { e.printStackTrace(); } } }

  实现三种滚动模式

  需求的地基已经实现了,很简单,难的就是添枝加叶了,先来看下MarqueeView的重要属性:

  private String string;//最终绘制的文本 private float speed = 1;//移动速度 private int textColor = Color.BLACK;//文字颜色,默认黑色 private float textSize = 12;//文字颜色,默认黑色 private int textDistance1= 10;//item间距,dp单位,默认10dp private int textdistance ;//textDistance1 转化而来的px宽度 private String black_count = "";//间距转化成空格距离 private int repetType = REPET_INTERVAL;//滚动模式 public static final int REPET_ONCETIME = 0;//一次结束 public static final int REPET_INTERVAL = 1;//一次结束以后,再继续第二次 public static final int REPET_CONTINUOUS = 2;//紧接着 滚动第二次 private float xLocation = 0;//文本的x坐标 private int contentWidth;//内容的宽度 private float startLocationDistance = 1.0f;//开始的位置选取,百分比来的,距离左边,0~1,0代表不间距,1的话代表,从右面,1/2代表中间。 private boolean isClickStop = false;//点击是否暂停 private boolean isResetLocation = true;//默认为true private boolean isRoll = false;//是否继续滚动 private float oneBlack_width;//空格的宽度

  其中repetType是该View的核心围绕点,根据repetType的值,在滚动的时候根据 contentWidth(注意是内容的宽度)与xLocation(滚出屏幕左边的距离)的值的大小来采取相应的措施就可以了。本文由专业app开发报价燚轩科技整理发布,如需转载请注明出处。

0 关注 分享

要回复文章请先登录注册