/*
* 利用Matrix 类可以实现图像的平衡、旋转、绽放等。一种方法是通过指定Matrix的值来实现。
* 另一种方法是通过Matrix的
* setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount)
* 方法。通过指定某点在变化前和变化后的位置,(其它点保持相对位置不变),系统自动计算实现该变化的
* Matrix.
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private class SampleView extends View{
private Paint mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
private Matrix mMatrix=new Matrix();
private Paint.FontMetrics mFontMetrics;
private void doDraw(Canvas canvas,float[] src,float[] dst){
//保存画布的状态
canvas.save();
//设置矩阵的变换方式
mMatrix.setPolyToPoly(src, , dst, , src.length>>);
//在画布上应用变换的矩阵
canvas.concat(mMatrix);
//绘制图形
mPaint.setColor(Color.GRAY);
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawRect(, , , , mPaint);
canvas.drawLine(, , , , mPaint);
canvas.drawLine(, , , , mPaint);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
float x=/;
//让字体的中心与图形的中心重合
float y=/-(mFontMetrics.ascent+mFontMetrics.descent)/;
canvas.drawText(src.length/+"", x, y, mPaint);
canvas.restore();
}
public SampleView(Context context) {
super(context);
mPaint.setStrokeWidth();
mPaint.setTextSize();
mPaint.setTextAlign(Paint.Align.CENTER);
mFontMetrics=mPaint.getFontMetrics();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.save();
canvas.translate(, );
//移动一个点,实现平移变换,将左上顶点从0,0移到5,5其它点相对位置不变,实现按对角线方向的平移
doDraw(canvas, new float[]{, }, new float[]{, });
canvas.restore();
canvas.save();
canvas.translate(, );
//移动两个点,实现旋转变换,以圆点为圆心旋转45度
doDraw(canvas, new float[]{,,,},
new float[]{,,,});
canvas.restore();
canvas.save();
canvas.translate(, );
//移动三个点,实现旋转/剪切变换
doDraw(canvas, new float[]{, , , , , },
new float[]{ , , , , , });
canvas.restore();
canvas.save();
canvas.translate(, );
//移动四个点,实现透视变换
doDraw(canvas, new float[]{ , , , , , , , },
new float[]{ , , , , , , , });
canvas.restore();
}
}
}