Android ViewGroup.setScaleX() 导致视图被裁剪

2023-11-21

I use 九老机器人库来缩放我的自定义布局。

public class MyLayout extends FrameLayout {
  // LayoutParams.MATCH_PARENT and all.
  ...
  @Override
  public boolean setPositionAndScale(ViewGroup v, PositionAndScale pas, PointInfo pi) {
    ...
    mScale = pas.getScale();
    ViewHelper.setScaleX(this, mScale);
    ViewHelper.setScaleY(this, mScale);
  }
}

我尝试过 FrameLayout 和 AbsoluteLayout。都具有相同的效果。 什么时候mScale < 1.0 缩放/缩放工作但布局的一部分是clipped.

mScale = 1.0:

mScale = 1.0

mScale < 1.0: scaling/zooming works but layout is clipped

mScale < 1.0

我该如何解决这个问题?

Edit:照片是在ICS上拍摄的。所以我不认为这是 NineOldAndroids 的问题。


您视图的父级必须拥有该属性android:clipChildren禁用(从布局文件或使用setClipChildren(false) ).

但使用这种方法,您不会在视图剪辑边界之外获得触摸事件。您可以通过从您的活动发送它们或编写自定义ViewGroup parent.

我正在使用一种不同的黑客,这似乎适用于我的情况,技巧是维护你自己的转换矩阵。然后,你必须超载很多ViewGroup的方法使其发挥作用。例如 :

@Override
protected void dispatchDraw(Canvas canvas) {
    Log.d(TAG, "dispatchDraw " + canvas);
    canvas.save();
    canvas.concat(mMatrix);
    super.dispatchDraw(canvas);
    canvas.restore();       
}


@Override   
public boolean dispatchTouchEvent(MotionEvent ev) {
    Log.d(TAG, "dispatchTouchEvent " + ev);
    ev.transform(getInvMatrix()); // 
    return super.dispatchTouchEvent(ev);

}

private Matrix getInvMatrix()
{
    if(!mTmpMatIsInvMat)
        mMatrix.invert(mTmpMat);
    mTmpMatIsInvMat = true;
    return mTmpMat;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android ViewGroup.setScaleX() 导致视图被裁剪 的相关文章

随机推荐

  • 如何在 Scala 中提前返回[重复]

    这个问题在这里已经有答案了 我现在正在学习Scala 我喜欢做的一件事是尽早返回 我相信这对每个人来说都更容易阅读 因为我们只是删除了之前的无效状态 现在 由于 Scala 是一种函数式语言 而且我读到削减计算是不好的函数式风格 我想知道是
  • 使用Databricks Job api调用databricks笔记本运行-提交端点

    我正在尝试建立一个调用 databricks 笔记本的 AWS lambda 函数 在 s3 触发器的情况下 我知道我必须在 lambda 函数 python 代码中使用 databricks 的 Jobs API 来使用以下命令发出 PO
  • Process.Start 在某些客户端上随机阻塞/挂起

    有一个非常相似的话题从未得到解决 here 我们有一个大型应用程序在多个客户端上运行 但最近我的一些代码停止工作 添加一些调试代码 我发现代码在调用 Process Start 时停止 没有设置 shellexecute true 通话很简
  • 由于缺少对象而导致 Git 损坏,我该怎么办?

    我刚刚去克隆另一台远程服务器上的存储库 并在尝试这样做时遇到了问题 git clone email protected blah blah docs git Cloning into docs remote Counting objects
  • C/C++ 中最好的加密库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 C C 中最好的加密库是什
  • Selenium 2 - 将焦点切换到没有名称/ID 的框架

    所以现在我想弄清楚当框架没有名称或 ID 时如何将焦点切换到 Selenium 2 中的框架 对于命名框架我这样做 driver SwitchTo Frame FrameName 但没有名字是什么 有人有这方面的经验吗 driver swi
  • 将 javax.ws.rs 实体序列化为 json

    我想序列化为 Jsonorg glassfish jersey执行 Map
  • ARM 模板 Azure Web App - 如何指定堆栈设置(.NET、.NET Core...)?

    在 Azure Web App 的 ARM 模板中 如何指定应用程序的堆栈设置 NET NET Core PHP 我看不到它的任何字段 谢谢 当您在门户上创建 azure webapp 时 选择Running stack as Net Co
  • 通用类和 Type.GetType()

    有点困惑 我有一个通用类 public abstract class MyClass
  • 如何以编程方式创建适用于 XP、Vista 和 Windows 7 的文件关联

    我希望能够从我的程序注册我的文件扩展名 将文件类型与我的程序关联起来 有很多关于此的文章 但据我所知 所讨论的技术 摆弄注册表 仅适用于 Windows XP 将文件类型与程序关联起来使其在 XP Vista 和 Windows 7 下也能
  • 您无权写入文件“ostream”所在的文件夹

    I had an error while editing a C file and Xcode put out a suggestion I clicked fix and I ve been getting this pop up eve
  • 如何在常用的 java 代码中运行 OSGi 框架?

    有人能给我一个如何使用 osgi 框架类的例子吗 我不知道如何使用这些课程 BR Markus 这取决于您使用的 OSGi 实现 我使用 Eclipse Equinox 并从常规 java 类中启动该框架 Eclipse jar 名为 or
  • iOS7 Tableview删除行最佳实践

    在 iPhone 上 有一个教科书示例 介绍如何删除消息应用程序中的表格视图行 这似乎使用三个单独的视图来执行任务 我的问题是 是否有捷径可以实现这一目标 或者您是否只是创建三个屏幕并做一些显而易见的事情 非常感谢 从故事板中删除一行非常简
  • 如何查看 HttpContext.Cache 中的内容

    有没有什么好的工具可以查看我的数据中有多少数据 或者更好的是该数据的值 HttpContext Cache Isis是 ASP NET 应用程序的控制面板 可以轻松查看应用程序的程序集 调试与否 日志记录 错误 cache 会话 性能计数器
  • 优雅关闭asp.net core

    遇到有关 ASP NET Core 应用程序正常关闭的非常过时的信息 有人可以填写更新的信息吗 用例 我想在应用程序退出时取消向领事注册 public static IWebHostBuilder CreateWebHostBuilder
  • keycloak apache 服务器配置存在“混合内容”问题

    在我的 apache 服务器后面配置 keycloak 时遇到问题 混合内容 页面位于 https dev mydomain com auth admin master console 已加载完毕 HTTPS 但请求了不安全的脚本 http
  • iPhone 支持 XML-RPC 吗?

    iPhone 是否支持 XML RPC 他们有我可以使用的开源框架吗 查看 WordPress 应用程序的源代码 他们可能正在使用 XML RPC http iphone wordpress org
  • 车把访问全局变量:if 语句

    我有一个 hbs 模板 其中有一个对象数组和一个布尔切换变量 切换模板行为 比方说 objs list mode true 我无法访问mode循环内时变量objs 上下文已更改 我想要的是使用 upper 变量创建一个 if 语句 我发现我
  • 在 Entity Framework 4.1 Code First 中创建双向一对一关系

    我想使用 EF Code First 在两个实体之间创建双向一对一关系 我在使用以下代码时遇到问题 你觉得我应该怎么做 public class User public string ID get set public string Las
  • Android ViewGroup.setScaleX() 导致视图被裁剪

    I use 九老机器人库来缩放我的自定义布局 public class MyLayout extends FrameLayout LayoutParams MATCH PARENT and all Override public boole