1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.example.android.apis.graphics; 18 19import android.content.Context; 20import android.graphics.*; 21import android.os.Bundle; 22import android.view.MotionEvent; 23import android.view.*; 24 25public class Patterns extends GraphicsActivity { 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(new SampleView(this)); 31 } 32 33 private static Bitmap makeBitmap1() { 34 Bitmap bm = Bitmap.createBitmap(40, 40, Bitmap.Config.RGB_565); 35 Canvas c = new Canvas(bm); 36 c.drawColor(Color.RED); 37 Paint p = new Paint(); 38 p.setColor(Color.BLUE); 39 c.drawRect(5, 5, 35, 35, p); 40 return bm; 41 } 42 43 private static Bitmap makeBitmap2() { 44 Bitmap bm = Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_8888); 45 Canvas c = new Canvas(bm); 46 Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 47 p.setColor(Color.GREEN); 48 p.setAlpha(0xCC); 49 c.drawCircle(32, 32, 27, p); 50 return bm; 51 } 52 53 private static class SampleView extends View { 54 private final Shader mShader1; 55 private final Shader mShader2; 56 private final Paint mPaint; 57 private final DrawFilter mFastDF; 58 59 private float mTouchStartX; 60 private float mTouchStartY; 61 private float mTouchCurrX; 62 private float mTouchCurrY; 63 private DrawFilter mDF; 64 65 public SampleView(Context context) { 66 super(context); 67 setFocusable(true); 68 setFocusableInTouchMode(true); 69 70 mFastDF = new PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG | 71 Paint.DITHER_FLAG, 72 0); 73 74 mShader1 = new BitmapShader(makeBitmap1(), Shader.TileMode.REPEAT, 75 Shader.TileMode.REPEAT); 76 mShader2 = new BitmapShader(makeBitmap2(), Shader.TileMode.REPEAT, 77 Shader.TileMode.REPEAT); 78 79 Matrix m = new Matrix(); 80 m.setRotate(30); 81 mShader2.setLocalMatrix(m); 82 83 mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); 84 } 85 86 @Override protected void onDraw(Canvas canvas) { 87 canvas.setDrawFilter(mDF); 88 89 mPaint.setShader(mShader1); 90 canvas.drawPaint(mPaint); 91 92 canvas.translate(mTouchCurrX - mTouchStartX, 93 mTouchCurrY - mTouchStartY); 94 95 mPaint.setShader(mShader2); 96 canvas.drawPaint(mPaint); 97 } 98 99 @Override 100 public boolean onTouchEvent(MotionEvent event) { 101 float x = event.getX(); 102 float y = event.getY(); 103 104 switch (event.getAction()) { 105 case MotionEvent.ACTION_DOWN: 106 mTouchStartX = mTouchCurrX = x; 107 mTouchStartY = mTouchCurrY = y; 108 mDF = mFastDF; 109 invalidate(); 110 break; 111 case MotionEvent.ACTION_MOVE: 112 mTouchCurrX = x; 113 mTouchCurrY = y; 114 invalidate(); 115 break; 116 case MotionEvent.ACTION_UP: 117 mDF = null; 118 invalidate(); 119 break; 120 } 121 return true; 122 } 123 } 124} 125 126