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