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

来源:互联网 发布:淘宝海外直购能退货吗 编辑:程序博客网 时间:2024/06/10 05:33

此案例通过自定义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();        }  }  


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



0 0
原创粉丝点击