# Matrix setPolyTOPoly 测试代码 ## SetPolyToPoly.java ```java public class SetPolyToPoly extends View{ private static final String TAG = "SetPolyToPoly"; private int testPoint = 0; private int triggerRadius = 180; // 触发半径为180px private Bitmap mBitmap; // 要绘制的图片 private Matrix mPolyMatrix; // 测试setPolyToPoly用的Matrix private float[] src = new float[8]; private float[] dst = new float[8]; private Paint pointPaint; public SetPolyToPoly(Context context) { this(context, null); } public SetPolyToPoly(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SetPolyToPoly(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initBitmapAndMatrix(); } private void initBitmapAndMatrix() { mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.poly_test2); float[] temp = {0, 0, // 左上 mBitmap.getWidth(), 0, // 右上 mBitmap.getWidth(), mBitmap.getHeight(), // 右下 0, mBitmap.getHeight()}; // 左下 src = temp.clone(); dst = temp.clone(); pointPaint = new Paint(); pointPaint.setAntiAlias(true); pointPaint.setStrokeWidth(50); pointPaint.setColor(0xffd19165); pointPaint.setStrokeCap(Paint.Cap.ROUND); mPolyMatrix = new Matrix(); mPolyMatrix.setPolyToPoly(src, 0, src, 0, 4); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_MOVE: float tempX = event.getX(); float tempY = event.getY(); // 根据触控位置改变dst for (int i=0; i 4 || testPoint < 0 ? 4 : testPoint; dst = src.clone(); resetPolyMatrix(this.testPoint); invalidate(); } } ``` ***** ## 布局文件 ``` xml ``` ***** ## MainActivity ``` java setContentView(R.layout.activity_main); final SetPolyToPoly poly = (SetPolyToPoly) findViewById(R.id.poly); RadioGroup group = (RadioGroup) findViewById(R.id.group); assert group != null; group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (group.getCheckedRadioButtonId()){ case R.id.point0: poly.setTestPoint(0); break; case R.id.point1: poly.setTestPoint(1); break; case R.id.point2: poly.setTestPoint(2); break; case R.id.point3: poly.setTestPoint(3); break; case R.id.point4: poly.setTestPoint(4); break; } } }); ``` ***** ## 依赖的库 绘制坐标系部分依赖了一个开源库。 * [ViewSupport](https://github.com/GcsSloop/ViewSupport )