如何将转换应用于View?

时间:2016-06-28 10:11:28

标签: android

我的自定义View已被覆盖onDraw

protected void onDraw(Canvas canvas)
{
    canvas.drawPath(m_path, m_paint);
}

我希望能够平移/缩放/旋转视图。而且每次用户移动手指时我都不想重绘它。我的想法是在视图中应用转换矩阵以响应用户手势。

我知道有一种方法ImageView.setImageMatrix似乎可以满足我的需求,但我没有ImageView,而是自定义View

在iOS中,我使用了CALayermyLayer.affineTransform = CGAffineTransformMake...

您如何建议在Android中处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

如果您正在绘制Path,则可以将Matrix(如Android调用仿射变换)应用于您的路径:

在用户互动时,您会更新矩阵,然后您的视图会调用:

        m_path.transform(m_matrix, m_path_draw);

请参阅Path#transform | Android Developers

onDraw()中,您可以致电:

        canvas.drawPath(m_path_draw, m_paint);

或者,CanvassetMatrix()方法:

        canvas.save();
        canvas.setMatrix(m_matrix);
        canvas.drawPath(m_path, m_paint);
        canvas.restore();

无论您使用哪种方法,我都建议您将Matrix作为成员变量,这样您只需在自定义视图构建过程中构建一次。