Closed luhaoaimama1 closed 8 years ago
你让图形左上角的点不要与坐标原点重合,注意示例图片中的坐标系,当图形左上角当点和坐标原点重合时,左上角的点的确不移动。
下面是当时使用的测试代码:
private void testSkew(Canvas canvas) {
canvas.translate(100,100);
// 绘制坐标系
CanvasAidUtils.setLen(900,1200);
CanvasAidUtils.drawCoordinateSystem(canvas);
mDeafultPaint.setColor(Color.BLACK);
drawNet(canvas);
Matrix matrix = canvas.getMatrix();
matrix.preSkew(1,0,0,0);
//canvas.skew(1, 0);
Log.e(TAG, "testSkew: "+canvas.getMatrix().toShortString());
canvas.setMatrix(matrix);
//canvas.skew(1, 0);
Log.e(TAG, "testSkew: "+canvas.getMatrix().toShortString());
mDeafultPaint.setColor(Color.BLUE);
drawNet(canvas);
}
private void drawNet(Canvas canvas){
mDeafultPaint.setStrokeWidth(5);
int space = 100;
for (int i=0;i<5;i++){
CanvasUtils.drawLine(new Point(50, 50+i*space), new Point(450, 50+i*space), canvas,mDeafultPaint);
CanvasUtils.drawLine(new Point(50+i*space, 50), new Point(50+i*space, 450), canvas,mDeafultPaint);
}
}
效果:
非常感谢 研究了半天 也不知道正确与否?脑子大了 得下班回家了~ 最终总结: xT,yT代表 偏离Matrix 0,0坐标系的点; kx,ky是 skew的 错切系数; 考虑坐标系原点的变换,最后加上(xT,yT)+(xT_ky,yT_kx);
http://fromwiz.com/share/s/3Hsjaq1-lQ9Q2SChN02Hkyvk09g7H73TokIK2Wsnje1-vRGw 因为这个给不了图 看完你给的错切图 我以为我以前的认知是错的呢 然后就验证了下 发现你这个图是错的 左上点没有动你这个动了 这个图很重要我只想说。。。