自定义轮播消息控件(自定义属性,onDraw,重写Animation等)

自定义轮播消息控件(自定义属性,onDraw,重写Animation等)

最近,项目要求,在大屏中,显示推送的消息,在原声不支持的情况下,只好自定义了,现在把自己定义的一些基本信息整理出来,方便以后的查看和给各位开发人员提供方便,如果有什么写的不对的地方希望大家提出来,共同学习。好了废话不多说我先把实现的界面以demo的形式给大家展示出来。有兴趣的同学可以继续往下面看。(由于gif上次不成功,上传了一个图片,里面的消息可以上下轮播的)
Paste_Image.png
效果的动态图
2首先需要定义下属性代码如下










此处定义的目的可以在xml文件中使用,但是使用必须在xml加入 xmlns:app=”http://schemas.android.com/apk/res-auto” 要不然自定义的 属性就没法识别,切记。
3下一步我们就写控件了,让我们集成view此处实现了一个构造方法,由于自定义了属性所以选择第二个在此处可以初始化,paint对象,以及一些自定义参数的初始化,以及动画,代码如下里面注释很清楚了不一一解释了

public VerticalRollingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
/去除锯齿的作用/
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.DEFAULT);
/初始化定义的参数/
parseAttrs(context, attrs);

    Paint.FontMetricsInt metricsInt = mPaint.getFontMetricsInt();
    /*此处是计算文字顶部和ascent的差距不明白的可以查看此篇博客 http://blog.csdn.net/aigestudio/article/details/41447349*/
    mTextTopToAscentOffset = metricsInt.ascent - metricsInt.top;
    Log.d("measure-->", "mTextTopToAscentOffset" + mTextTopToAscentOffset);
    //设置动画时间
    mAnimation.setDuration(mDuration);
}

private void parseAttrs(Context context, AttributeSet attrs) {
    /*屏幕密度设置默认的字体大小*/
    float density = getResources().getDisplayMetrics().density;
    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.VerticalRollingTextView);
    mPaint.setColor(typedArray.getColor(R.styleable.VerticalRollingTextView_android_textColor, Color.BLACK));
    mPaint.setTextSize(typedArray.getDimensionPixelOffset(R.styleable.VerticalRollingTextView_android_textSize, (int) (dens
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值