简单自定义View圆形呼吸效果

本文介绍了一个自定义的Android视图CircleView,该视图继承自View并实现了Runnable接口,用于绘制一个动态变化半径的蓝色圆。文章详细解释了如何通过Canvas和Paint来实现动态效果,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class CircleView extends View implements Runnable {
private Context context;
private Paint mPaint;
private double radio;



public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);


}


public CircleView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    initPaint();// 初始化画笔,不要在onDraw方法里初始化否则会造成内存浪费
}


public CircleView(Context context) {
    this(context, null);
    // TODO Auto-generated constructor stub


}


@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    // canvas画布的draw....方法可以在canvas画布上绘制出各种图形,当然,画图需要用到画笔工具,那么这个画笔工具可以是我们new出来的。
    canvas.drawCircle(300, 300, (int) radio, mPaint);// 这里的四个参数分别是圆的圆心坐标X,Y;圆半径,和画笔


}


private void initPaint() {
    // 实例化Paint类,得到mPaint对象,这就是我们定义的画笔工具,
    mPaint = new Paint(SYSTEM_UI_LAYOUT_FLAGS);
    // 去边缘锯齿,这个方法可以使画出的图形更加圆滑,自然。
    mPaint.setAntiAlias(true);
    // 设置画笔的颜色
    mPaint.setColor(Color.BLUE);
    // 设置画笔的粗细程度,这里的参数单位是像素
    mPaint.setStrokeWidth(10);
    // 设置画笔风格
    mPaint.setStyle(Paint.Style.STROKE);
}


// 定义一个变量x,下边的曲线方程会用到
double x = 0;


@Override
public void run() {
    // 构建一个死循环
    while (true) {
        // 每循环一次,x都加0.1,此处用到曲线方程y=200|sin(x)|;
        x += 0.1;
        try {
            radio = 200 * Math.abs(Math.sin(x));//最大半径200
            //试图刷新方法,另一个刷新方法invalidate()在此处不适用
            postInvalidate();
            //为了视觉舒适,每次改变半径后休眠80毫秒,
            Thread.sleep(80);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


}


}

附源码链接http://download.youkuaiyun.com/detail/u012598233/8515569

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值