canvas教程

Android自定义view实现动画数字圆圈

字号+ 作者:H5之家 来源:H5之家 2016-10-23 11:01 我要评论( )

当前位置:主页 > 软件开发 > 编程综合 > Android自定义view实现动画数字圆圈 发布时间:2016-08-02 22:26 | 作者:采集侠 | 来源:网络整理 | 浏览: 我们要实现的是如下的效果, 1.该view在设置属性之后时候会有数字和圆圈不断增长的效果 2.该view在按下和

  • 当前位置:主页 > 软件开发 > 编程综合 >
  • Android自定义view实现动画数字圆圈
  • 发布时间:2016-08-02 22:26 | 作者:采集侠 | 来源:网络整理 | 浏览:
  • 我们要实现的是如下的效果,

    Android自定义view实现动画数字圆圈

    1.该view在设置属性之后时候会有数字和圆圈不断增长的效果

    2.该view在按下和放开状态下显示不同的样式。

    这种效果逻辑上并不复杂,底层灰色圆圈和蓝色扇形圆圈都是用canvas.drawArc()绘制出来的,中间的数字用drawtext绘制,数字不断增长的效果用了继承Animation的动画类;在按下和放开状态下显示不同的样式是重写了View 的setPressed()方法。

    先贴出所有代码,再一一解释

    import com.jcodecraeer.util.MyUtils; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; import android.graphics.Paint.Align; import android.graphics.Paint.Style; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; public class CircleBar extends View { private RectF mColorWheelRectangle = new RectF(); private Paint mDefaultWheelPaint; private Paint mColorWheelPaint; private Paint textPaint; private float mColorWheelRadius; private float circleStrokeWidth; private float pressExtraStrokeWidth; private String mText; private int mCount; private float mSweepAnglePer; private float mSweepAngle; private int mTextSize; BarAnimation anim; public CircleBar(Context context) { super(context); init(null, 0); } public CircleBar(Context context, AttributeSet attrs) { super(context, attrs); init(attrs, 0); } public CircleBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs, defStyle); } private void init(AttributeSet attrs, int defStyle) { circleStrokeWidth = MyUtils.dip2px(getContext(), 10); pressExtraStrokeWidth = MyUtils.dip2px(getContext(), 2); mTextSize = MyUtils.dip2px(getContext(), 40); mColorWheelPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mColorWheelPaint.setColor(0xFF29a6f6); mColorWheelPaint.setStyle(Paint.Style.STROKE); mColorWheelPaint.setStrokeWidth(circleStrokeWidth); mDefaultWheelPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mDefaultWheelPaint.setColor(0xFFeeefef); mDefaultWheelPaint.setStyle(Paint.Style.STROKE); mDefaultWheelPaint.setStrokeWidth(circleStrokeWidth); textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); textPaint.setColor(0xFF333333); textPaint.setStyle(Style.FILL_AND_STROKE); textPaint.setTextAlign(Align.LEFT); textPaint.setTextSize(mTextSize); mText = "0"; mSweepAngle = 0; anim = new BarAnimation(); anim.setDuration(2000); } @Override protected void onDraw(Canvas canvas) { canvas.drawArc(mColorWheelRectangle, -90, 360, false, mDefaultWheelPaint); canvas.drawArc(mColorWheelRectangle, -90, mSweepAnglePer, false, mColorWheelPaint); Rect bounds = new Rect(); String textstr=mCount+""; textPaint.getTextBounds(textstr, 0, textstr.length(), bounds); canvas.drawText( textstr+""
  • 收藏 |
  • 上一篇:重写setContentView实现多个Activity部分UI布局相同
  • 下一篇:android 加载器loader详解
  • 相关内容
  • 推荐排行
  • 随即浏览

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Android Canvas学习笔记(1)

      Android Canvas学习笔记(1)

      2016-10-22 10:01

    • 8.2.12 drawArc方法:绘制圆弧

      8.2.12 drawArc方法:绘制圆弧

      2016-10-20 16:01

    • Android 学习技能积累

      Android 学习技能积累

      2016-10-13 15:00

    • Android 模拟信号示波器示例代码

      Android 模拟信号示波器示例代码

      2016-10-06 17:00

    网友点评
    m