我想在左侧将一张图片“倾斜”10%,这样看起来就像它被稍微旋转了一下。我认为最简单的方法是创建一个自定义的“skewedimageview”,它扩展了ImageView并具有覆盖的setFrame方法。
更明确地说,这就是我想要的: 虽然我尝试了很多可能的矩阵组合,并尝试设置setSkew(听起来像是我想要的)。我尝试过定义和不定义枢轴点,但两者都没有成功。我也不确定选择哪个点作为枢轴点:它应该是一个保持不变的点,但我认为在这种转换中有很多不变的点(完整的右侧和水平中心线)。
我还尝试了 mapPoints,只是将左上角向下移动 5%,将右下角向上移动 5%,但似乎也不起作用。
更明确地说,这就是我想要的: 虽然我尝试了很多可能的矩阵组合,并尝试设置setSkew(听起来像是我想要的)。我尝试过定义和不定义枢轴点,但两者都没有成功。我也不确定选择哪个点作为枢轴点:它应该是一个保持不变的点,但我认为在这种转换中有很多不变的点(完整的右侧和水平中心线)。
我还尝试了 mapPoints,只是将左上角向下移动 5%,将右下角向上移动 5%,但似乎也不起作用。
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
Matrix matrix = getImageMatrix();
matrix.setSkew(1f,0.9f);
setImageMatrix(matrix);
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
}
有人有想法如何修复这个问题,使用setSkew或mapPoints的最佳实践是什么?或者手动创建变换矩阵(但我认为这比使用这些方法要困难得多)。
编辑: 如pskink所建议,我使用了函数setpoly2poly,如下所示:
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
float height = frameBottom - frameTop;
float width = frameRight - frameLeft;
System.out.println("Height is "+height);
int dy=0.05*height;
Matrix matrix = getImageMatrix();
float[] startpoints = {0,0,0,height}; //{0,0} =top left, {0,height}= left bottom
float[] endpoints = {0,0+dy,0,height-dy}; //topleft 5% down, bottom left 5% up
matrix.setPolyToPoly(startpoints,0,endpoints,0,2);
setImageMatrix(matrix);
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
它有一些功能,但主要的功能是将图像缩放到左上角...