android - 如何对 View 应用转换?

标签 android

我有一个自定义的 View 覆盖了 onDraw:

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

我想让平移/缩放/旋转 View 成为可能。而且我不想每次用户移动他的手指时都重新绘制它。我的想法是将转换矩阵应用于 View 以响应用户手势。

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

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

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

最佳答案

如果您正在绘制路径,您可以将矩阵(Android 称为仿射变换)应用于您的路径:

在用户交互时,您将更新矩阵,然后您的 View 将调用:

        m_path.transform(m_matrix, m_path_draw);

参见 Path#transform | Android Developers

onDraw() 中,你会调用:

        canvas.drawPath(m_path_draw, m_paint);

或者,Canvas 有一个setMatrix() 方法:

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

无论您使用哪种方法,我都建议让您的 Matrix 成为一个成员变量,这样您在自定义 View 构造期间只需构造一次。

关于android - 如何对 View 应用转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073312/

相关文章:

android - MonoDroid 自定义控件 + 以编程方式填充 ListView

java - 断言-内部调用的问题

Android连接服务器ip和端口

android - 在 FirebaseUI 中更改 startActivityForResult 的布局

java - 在 android sdk 15 及更低版本上的函数中更改按钮背景

android - 粘贴到多个编辑文本

android - 双击/点按 map 缩放 (Android)

android - "Native platforms"上传到 Play 商店时减少,并发出关于 "app being available for new installs on fewer types of devices"的警告

android - 使用ADB检查飞行模式是否打开?

c# - 如何使用现有的 ASP.net 控制台应用程序构建 android 和 ios 应用程序