public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private Bitmap makeBitmap1() {
Bitmap bm = Bitmap.createBitmap(40, 40, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
c.drawColor(Color.RED);
Paint p = new Paint();
p.setColor(Color.BLUE);
c.drawRect(5, 5, 35, 35, p);
return bm;
}
private Bitmap makeBitmap2() {
Bitmap bm = Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.GREEN);
p.setAlpha(0xcc);
c.drawCircle(32, 32, 27, p);
return bm;
}
private class SampleView extends View {
private Shader mShader1;
private Shader mShader2;
private Paint mPaint;
private DrawFilter mFastDF;
private float mStartX;
private float mStartY;
private float mCurrentX;
private float mCurrentY;
private DrawFilter mDF;
public SampleView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
mFastDF = new PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG
| Paint.DITHER_FLAG, 0);
mShader1 = new BitmapShader(makeBitmap1(), Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
mShader2 = new BitmapShader(makeBitmap2(), Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
Matrix m=new Matrix();
m.setRotate(30);
mShader2.setLocalMatrix(m);
mPaint=new Paint(Paint.FILTER_BITMAP_FLAG);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.setDrawFilter(mDF);
mPaint.setShader(mShader1);
canvas.drawPaint(mPaint);
canvas.translate(mCurrentX-mStartX, mCurrentY-mStartY);
mPaint.setShader(mShader2);
canvas.drawPaint(mPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x=event.getX();
float y=event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartX=mCurrentX=x;
mStartY=mCurrentY=y;
mDF=mFastDF;
invalidate();
break;
case MotionEvent.ACTION_MOVE:
mCurrentX=x;
mCurrentY=y;
invalidate();
break;
case MotionEvent.ACTION_UP:
mDF=null;
invalidate();
break;
}
return true;
}
}
}