Android开发:ImageView上绘制旋转圆环(透明度不同的旋转圆环,利用canvas.drawArc实现)

      上文已经绘制了圆环,但仔细分析就知,如果只需要圆环的话,那么只绘制圆环就可以,不用画内圆和外圆了。事实证明也是如此。

        但是要做成和下面的圆环透明度不一的效果上面的方法还是达不中:

用drawCircle不中了,经查android提供了绘制圆弧的函数drawArc,参考http://zhidao.baidu.com/question/469977150.html,也可以看这里http://blog.chinaunix.net/uid-23392298-id-3345789.html

canvas.drawArc(new RectF(0, 0, 128, 128), 0, 360, true, new Paint(
Paint.ANTI_ALIAS_FLAG));
参数1:圆的范围大小
参数2:起始角度
参数3:圆心角角度,360为圆,180为半圆
参数4:中心
参数5:画笔Paint,可以设置画线or填充,设置颜色,设置线的粗细等等第四个参数

最关键的是第一个参数RectF,在什么地方绘制圆弧就是由这个矩形的位置确定的。根据上文,这个RectF应该是内切圆弧的外圆(尽管没画,但还是有)。所以其左上点及右下点坐标为:

        RectF rect2 = new RectF(center-(innerCircle + 1 +ringWidth/2),center-(innerCircle + 1 +ringWidth/2), center+(innerCircle + 1 +ringWidth/2), center+(innerCircle + 1 +ringWidth/2));

     为了绘制出透明度不同的圆环分两部来绘制:

this.paint.setARGB(200, 127, 255, 212);
        this.paint.setStrokeWidth(ringWidth);
        //绘制不透明部分
        canvas.drawArc(rect2, 180+startAngle, 90, false, paint);
        canvas.drawArc(rect2, 0+startAngle, 90, false, paint);
        //绘制透明部分
        this.paint.setARGB(30, 127, 255, 212);
        canvas.drawArc(rect2, 90+startAngle, 90, false, paint);
        canvas.drawArc(rect2, 270+startAngle, 90, false, paint);

上面的代码当startAngle = 0时,绘制的是一个静态的透明度交替的圆弧。接着要让它转起来。增加代码:      

     startAngle+=10;
        if(startAngle == 180)
            startAngle = 0;   
 

事实上后两句也可以不增加,仿照前文SurfaceView绘制旋转动画的例子用这种求余的思想,(rotate += 48) % 360,把上面角度也弄个%360,也是可以的。

剩下的事就是让这个东西循环执行了。在super.onDraw(canvas);这句代码后面加 invalidate();就可以了!透明圆环就转起来了。






  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用 Layer-List 和 Rotate Animation 来实现这个效果。 1. 首先,在 res/drawable 目录下新建一个 xml 文件,例如 ring.xml,用来定义圆环的形状和颜色。代码如下: ``` <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadius="30dp" android:thickness="10dp" android:shape="ring" android:useLevel="false"> <solid android:color="@android:color/transparent" /> <stroke android:width="5dp" android:color="@android:color/holo_blue_light" /> </shape> </item> </layer-list> ``` 2. 接着,在 res/anim 目录下新建一个 xml 文件,例如 rotate.xml,用来定义圆环旋转动画。代码如下: ``` <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromDegrees="0" android:toDegrees="45" android:pivotX="50%" android:pivotY="50%" /> ``` 3. 最后,在布局文件中添加一个 ImageView,并将上述两个文件作为其 background 和 animation 属性。代码如下: ``` <ImageView android:id="@+id/ring" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/ring" android:layout_centerInParent="true" android:clickable="true" android:onClick="rotate" /> ``` 其中,rotate 是一个在 Activity 中定义的方法,用来触发动画。代码如下: ``` public void rotate(View view) { ImageView ring = (ImageView) view; Animation anim = AnimationUtils.loadAnimation(this, R.anim.rotate); ring.startAnimation(anim); } ``` 现在,点击圆环就可以看到它顺时针旋转45度的动画效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值