Android中的倾斜矩阵
Posted
技术标签:
【中文标题】Android中的倾斜矩阵【英文标题】:Skew matrix in Android 【发布时间】:2014-08-13 13:15:43 【问题描述】:我正在开发 android 项目。我正在使用 View 类使用带有矩阵的画布绘制位图。
如何倾斜矩阵?变成这样:
我正在使用此代码,但它不起作用:
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);
【问题讨论】:
Matrix.setPolyToPoly 感谢您的回复,但您能否以简单的示例解释方法及其参数作为答案? 例如使用 src 作为 0,0,0,1,1,1,1,0 和 dst 0.2,0,0,1,1,1,0.8,0 请看上面的代码,哪里错了? 使用工作代码查看我的答案 【参考方案1】:使用这样的东西:
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);
【讨论】:
非常感谢pskink,明天我会测试它,因为我现在没有设备,我会告诉你结果如何。 查看更新以保持图像纵横比以上是关于Android中的倾斜矩阵的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 iOS 或 Android 手机的移动 Webkit 上接收 JavaScript 中的倾斜事件? [关闭]
如何使用 Android 中的加速度计测量手机在 XY 平面上的倾斜度