Android中的倾斜矩阵
我在做Android项目。我正在使用View类使用画布和矩阵绘制位图 如何使矩阵倾斜?像这样:Android中的倾斜矩阵,android,matrix,view,android-canvas,Android,Matrix,View,Android Canvas,我在做Android项目。我正在使用View类使用画布和矩阵绘制位图 如何使矩阵倾斜?像这样: class V extends View { private Bitmap b; private Matrix m; public V(Context context) { super(context); b = BitmapFactory.decodeResource(getResources(), R.drawable.layer0);
class V extends View {
private Bitmap b;
private Matrix m;
public V(Context context) {
super(context);
b = BitmapFactory.decodeResource(getResources(), R.drawable.layer0);
m = new Matrix();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
int bw = b.getWidth();
int bh = b.getHeight();
float[] src = {0, 0, 0, bh, bw, bh, bw, 0};
int DX = 100;
float[] dst = {0 + DX, 0, 0, h, w, h, w - DX, 0};
m.setPolyToPoly(src, 0, dst, 0, 4);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(b, m, null);
}
}
我正在使用此代码,但它不起作用:
float[] src=new float[]{0,0,0,1,1,1,1,0};
float[] dst=new float[]{0.2f,0,0,1,1,1,0.8f,0};
Paint paint = new Paint();
matrix.reset();
matrix.postTranslate(-width / 2.0f, -height / 2.0f);
matrix.postRotate(0/*(float)(angle*180/Math.PI) ,-width / 2.0f + 50, -height / 2.0f +50*/);
matrix.postScale(scale, scale);
matrix.setPolyToPoly(src, 0, dst, 0, 4);
matrix.postTranslate(position.getX(), position.getY());
canvas.drawBitmap(bitmap, matrix, paint);
canvas.concat(matrix);
使用类似以下内容:
class V extends View {
private Bitmap b;
private Matrix m;
public V(Context context) {
super(context);
b = BitmapFactory.decodeResource(getResources(), R.drawable.layer0);
m = new Matrix();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
int bw = b.getWidth();
int bh = b.getHeight();
float[] src = {0, 0, 0, bh, bw, bh, bw, 0};
int DX = 100;
float[] dst = {0 + DX, 0, 0, h, w, h, w - DX, 0};
m.setPolyToPoly(src, 0, dst, 0, 4);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(b, m, null);
}
}
更新以保持图像纵横比:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
int bw = b.getWidth();
int bh = b.getHeight();
RectF src = new RectF(0, 0, bw, bh);
RectF dst = new RectF(0, 0, w, h);
m.setRectToRect(src, dst, ScaleToFit.CENTER);
float[] pts = {0, 0, 0, bh, bw, bh, bw, 0, 0, 0, 0, 0, 0, 0, 0, 0};
m.mapPoints(pts, 8, pts, 0, 4);
int DX = 40;
pts[8] += DX;
pts[14] -= DX;
m.setPolyToPoly(pts, 0, pts, 8, 4);
}
Matrix.SetPolyTopology谢谢你的回复,但是你能用一个简单的例子来解释这个方法和它的参数吗?使用src作为0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0.8,0,例如dst 0.2,0,0,0,1,1,1,0.8,0,请查看上面的代码,哪里是错误的?用一个工作代码查看我的答案谢谢,我明天会测试它,因为我现在没有设备,我会告诉你结果是什么。查看更新以保持图像纵横比