diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice01ClipRectView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice01ClipRectView.java index e667df3..4c59539 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice01ClipRectView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice01ClipRectView.java @@ -37,7 +37,7 @@ protected void onDraw(Canvas canvas) { int left = (getWidth() - bitmap.getWidth()) / 2; int top = (getHeight() - bitmap.getHeight()) / 2; - + canvas.clipRect(left+50,top+50,left+300,top+200); canvas.drawBitmap(bitmap, left, top, paint); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice02ClipPathView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice02ClipPathView.java index 06631c7..e8ba472 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice02ClipPathView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice02ClipPathView.java @@ -7,6 +7,8 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; +import android.graphics.Shader; +import android.graphics.Xfermode; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; @@ -38,8 +40,19 @@ public Practice02ClipPathView(Context context, @Nullable AttributeSet attrs, int @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + Path path1 = new Path(); + path1.addCircle(point1.x+200,point1.y+200,150, Path.Direction.CW); + canvas.save(); + canvas.clipPath(path1); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + Path path2 = new Path(); + path2.addCircle(point2.x+200,point2.y+200,150, Path.Direction.CW); + path2.setFillType(Path.FillType.INVERSE_WINDING); + canvas.save(); + canvas.clipPath(path2); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice03TranslateView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice03TranslateView.java index c1cfe96..f50215e 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice03TranslateView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice03TranslateView.java @@ -37,8 +37,14 @@ public Practice03TranslateView(Context context, @Nullable AttributeSet attrs, in @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + canvas.save(); + canvas.translate(-100,-100); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + canvas.translate(200,0); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } \ No newline at end of file diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice04ScaleView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice04ScaleView.java index ddecb72..d05c2a6 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice04ScaleView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice04ScaleView.java @@ -37,8 +37,14 @@ public Practice04ScaleView(Context context, @Nullable AttributeSet attrs, int de @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + canvas.save(); + canvas.scale(1.3f,1.3f,point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + canvas.scale(0.6f,1.5f,point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice05RotateView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice05RotateView.java index 0cd80a9..fd85792 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice05RotateView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice05RotateView.java @@ -37,8 +37,14 @@ public Practice05RotateView(Context context, @Nullable AttributeSet attrs, int d @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + canvas.save(); + canvas.rotate(180,point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + canvas.rotate(45,point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } \ No newline at end of file diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice06SkewView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice06SkewView.java index f2b64bb..6890ab2 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice06SkewView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice06SkewView.java @@ -37,8 +37,14 @@ public Practice06SkewView(Context context, @Nullable AttributeSet attrs, int def @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + canvas.save(); + canvas.skew(0,0.5f); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + canvas.skew(-0.5f,0); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice07MatrixTranslateView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice07MatrixTranslateView.java index 3a9deba..d4e6504 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice07MatrixTranslateView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice07MatrixTranslateView.java @@ -4,6 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.support.annotation.Nullable; @@ -37,8 +38,18 @@ public Practice07MatrixTranslateView(Context context, @Nullable AttributeSet att @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + Matrix matrix = new Matrix(); + matrix.postTranslate(-100,-100); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + matrix.reset(); + matrix.postTranslate(200,0); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice08MatrixScaleView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice08MatrixScaleView.java index ee167a0..9b0f471 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice08MatrixScaleView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice08MatrixScaleView.java @@ -4,6 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.support.annotation.Nullable; @@ -37,8 +38,18 @@ public Practice08MatrixScaleView(Context context, @Nullable AttributeSet attrs, @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + Matrix matrix = new Matrix(); + matrix.postScale(1.2f,1.2f,point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + matrix.reset(); + matrix.postScale(0.6f,1.5f,point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice09MatrixRotateView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice09MatrixRotateView.java index c1407fd..454b6ac 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice09MatrixRotateView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice09MatrixRotateView.java @@ -4,6 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.support.annotation.Nullable; @@ -38,7 +39,18 @@ public Practice09MatrixRotateView(Context context, @Nullable AttributeSet attrs, protected void onDraw(Canvas canvas) { super.onDraw(canvas); + Matrix matrix = new Matrix(); + matrix.postRotate(180,point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + matrix.reset(); + matrix.postRotate(45,point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice10MatrixSkewView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice10MatrixSkewView.java index 3079e3b..01b3366 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice10MatrixSkewView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice10MatrixSkewView.java @@ -4,6 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.support.annotation.Nullable; @@ -37,8 +38,18 @@ public Practice10MatrixSkewView(Context context, @Nullable AttributeSet attrs, i @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + Matrix matrix = new Matrix(); + matrix.postSkew(0,0.5f,point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + matrix.reset(); + matrix.postSkew(-0.5f,0,point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); + canvas.save(); + canvas.concat(matrix); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice11CameraRotateView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice11CameraRotateView.java index 06bfc9a..f944b80 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice11CameraRotateView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice11CameraRotateView.java @@ -3,6 +3,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; @@ -17,6 +18,7 @@ public class Practice11CameraRotateView extends View { Bitmap bitmap; Point point1 = new Point(200, 200); Point point2 = new Point(600, 200); + Camera camera =new Camera(); public Practice11CameraRotateView(Context context) { super(context); @@ -38,7 +40,20 @@ public Practice11CameraRotateView(Context context, @Nullable AttributeSet attrs, protected void onDraw(Canvas canvas) { super.onDraw(canvas); + canvas.save(); + camera.save(); + camera.rotateX(30); + camera.applyToCanvas(canvas); + camera.restore(); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + camera.save(); + camera.rotateY(30); + camera.applyToCanvas(canvas); + camera.restore(); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice12CameraRotateFixedView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice12CameraRotateFixedView.java index 7f30dc3..329ebc1 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice12CameraRotateFixedView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice12CameraRotateFixedView.java @@ -3,6 +3,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; @@ -38,7 +39,25 @@ public Practice12CameraRotateFixedView(Context context, @Nullable AttributeSet a protected void onDraw(Canvas canvas) { super.onDraw(canvas); + Camera camera =new Camera(); + canvas.save(); + camera.save(); + canvas.translate(point1.x+bitmap.getWidth()/2,point1.y+bitmap.getHeight()/2); + camera.rotateX(30); + camera.applyToCanvas(canvas); + canvas.translate(-point1.x-bitmap.getWidth()/2,-point1.y-bitmap.getHeight()/2); + camera.restore(); canvas.drawBitmap(bitmap, point1.x, point1.y, paint); + canvas.restore(); + + canvas.save(); + camera.save(); + canvas.translate(point2.x+bitmap.getWidth()/2,point2.y+bitmap.getHeight()/2); + camera.rotateY(30); + camera.applyToCanvas(canvas); + canvas.translate(-point2.x-bitmap.getWidth()/2,-point2.y-bitmap.getHeight()/2); + camera.restore(); canvas.drawBitmap(bitmap, point2.x, point2.y, paint); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice13CameraRotateHittingFaceView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice13CameraRotateHittingFaceView.java index e0a77cb..241d65e 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice13CameraRotateHittingFaceView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice13CameraRotateHittingFaceView.java @@ -12,6 +12,7 @@ import android.graphics.Point; import android.support.annotation.Nullable; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.view.View; import android.view.animation.LinearInterpolator; @@ -47,6 +48,10 @@ public Practice13CameraRotateHittingFaceView(Context context, @Nullable Attribut animator.setDuration(5000); animator.setInterpolator(new LinearInterpolator()); animator.setRepeatCount(ValueAnimator.INFINITE); + + DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); + float newZ = - displayMetrics.density * 6; + camera.setLocation(0, 0, newZ); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice14FlipboardView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice14FlipboardView.java index 992d6e8..23953ad 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice14FlipboardView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw4/practice/Practice14FlipboardView.java @@ -72,8 +72,20 @@ protected void onDraw(Canvas canvas) { int x = centerX - bitmapWidth / 2; int y = centerY - bitmapHeight / 2; + + canvas.save(); + canvas.clipRect(x,y,x+bitmapWidth,y+bitmapHeight/2); + canvas.drawBitmap(bitmap, x, y, paint); + canvas.restore(); + + canvas.save(); + if(degree<90){ + canvas.clipRect(x,y+bitmapHeight/2,x+bitmapWidth,y+bitmapHeight); + }else { + canvas.clipRect(x,y,x+bitmapWidth,y+bitmapHeight/2); + } camera.save(); camera.rotateX(degree); canvas.translate(centerX, centerY); @@ -83,5 +95,7 @@ protected void onDraw(Canvas canvas) { canvas.drawBitmap(bitmap, x, y, paint); canvas.restore(); + + } }