自定义View的简单案例(4)实现小风车旋转的效果

此案例通过自定义view设置一张风车的图片实现不停旋转的功能。可以先看下面的效果在看具体的实现

和前面一样首先自定义一个类继承View 实现两个构造方法,之后在两个构造方法中都初始化画笔在此案例中用到的canvas的方法先给大家解释一下:

canvas.save()保存状态,
canvas.rotate()旋转

canvas.restore();删除画布属性

invalidate();刷新画布
这四个方法在此案例中起到的比较重要的作用 首先们初始化画笔,然后在ondraw方法中保存状态然后对canvas进行操作,先将图片画到画布上

然后通过画布的旋转进行旋转,通过定义degress来改变旋转的角度,通过restore方法保存状态和invalidate不断的进行刷新来实现风车旋转的效果

下面就是实现代码:


package demo.liuchen.com.android27_customview.rotate;  
  
import android.content.Context;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.os.Build;  
import android.support.annotation.RequiresApi;  
import android.util.AttributeSet;  
import android.view.View;  
  
import demo.liuchen.com.android27_customview.R;  
  
/** 
 * Created by ${LC} on 2016/11/22. 
 */  
  
public class MyRotateView extends View{  
    private Paint paint;  
    private int degree= 0;  
  
  
    public MyRotateView(Context context) {  
        super(context);  
        initPaint();  
    }  
  
    public MyRotateView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        initPaint();  
    }  
  
    public void initPaint(){  
        paint = new Paint();  
        paint.setAntiAlias(true);  
    }  
  
  
    @Override  
    protected void onDraw(Canvas canvas) {  
        super.onDraw(canvas);  
        canvas.drawColor(Color.WHITE);  
        //画布先进行保存然后restore需要配套使用 save可以保存各状态 restore:删除画布属性  
        canvas.save();  
        degree++;  
        int width = getWidth();  
        int height = getHeight();  
  
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.fengches);  
        /** 
         * 对画布进行旋转 
         * @param degress:旋转的角度,类型为float 
         * @param coorx:  x的偏移量 
         * @param coory:  y的偏移量 
         * 
         */  
       // canvas.rotate(degree,150,150);//这个点为旋转中心  
        canvas.rotate(degree,width/3,height/3);  
  
        /** 
         * 画布画一个正方形 
         */  
  
        canvas.drawBitmap(bitmap, width/3-bitmap.getWidth()/2  , height/3-bitmap.getHeight()/2  ,paint);  
//        canvas.drawRect(100,100,200,200,paint);  
  
  
        canvas.restore();  
        //刷新  
        invalidate();  
  
    }  
}  


 
运行完就会有如图的效果,赶快试试吧 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值