我的应用程序在3x3网格中有9个位图图像。所有这些都在屏幕上显示,并且根据用户与它们的交互方式(点按,双击,捏合,缩放,拖动),“动作上”的图像需要执行不同的任务。
例如,如果我点击一个图像,它需要完全围绕它的垂直访问旋转,然后停止。
目前我正在使用带有onTouchEvent(..)方法的SurfaceView。我认为我可以设置动画的方法是将图像的宽度从1缩放到-1再回到1.我一直在尝试使用矩阵,但我无法让图像保持居中的位置。请帮我解决这个问题或建议一种替代/更好的方法来实现这一点。
我目前的代码只是一个测试。如果 b 为真,则该方法将尝试缩放位图。如果 b 为false,则会正常绘制位图。
public void doDraw(Canvas canvas, boolean b)
{
Matrix m = new Matrix();
float scale = .5f;
m.setScale(scale, 1f);
m.postTranslate(mX,mY);
if(!b)
canvas.drawBitmap(mBitmap, mX, mY, null);
else
canvas.drawBitmap(mBitmap, m, null);
}
答案 0 :(得分:1)
尝试使用此代替postTranslate
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
其中centerX,Y是位图的中心
<强>更新强>
你可以在android上使用graphics.camera来转换矩阵。访问摄像头到主视图(网格)并覆盖getChildStaticTransformation。获取转换矩阵。 t.getMatrix()
并改变那一个。您可以将其移动到任何您想要的位置,因为这是主视图中的矩阵,但仅用于渲染该特定孩子。
所以做那样的事情
@Override
protected boolean getChildStaticTransformation(View child, Transformation t) {
Matrix matrix = t.getMatrix();
int centerX = (child.getWidth() / 2);
int centerY = (child.getHeight() / 2);
t.clear();
t.setTransformationType(Transformation.TYPE_MATRIX);
mCamera.save();
if (child == getChildAt(0)) {
mCamera.translate(pixels to the right,pixels to the bottom,
to the z axis);
mCamera.getMatrix(matrix);
mCamera.restore();
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
}
return true;
}
也不要忘记设置setStaticTransformationsEnabled(true)
;某个地方到网格的构造函数