Android 4.4.2 仅在完整的 Java 代码动画期间在视图对象边界外部创建黑色遮罩

2023-12-06

在这方面确实需要一些帮助......

请看一下这个简单的 ImageView 淡入动画,使用完整的 java 代码。使用 API 21、18、17、16 重新创建它,效果非常好。现在尝试使用 API 19 (android 4.4.2),创建有趣的掩码(参见下面的解释):

public class _ExampleAnimationNotWorking extends Activity {
Common common; // my own class to read assets
FrameLayout fl;
ImageView iv;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.common = new Common(this,this);
    this.fl = new FrameLayout(this);
    this.iv = new ImageView(this);

    FrameLayout.LayoutParams flparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT);
    LayoutParams lparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    iv.setImageBitmap(common.newImage("iv_image.png", ImageFormat.RGB565).getBitmap());
    iv.setX(50);
    iv.setY(0);

    fl.addView(iv, lparam);
    this.setContentView(fl, flparam);

    AlphaAnimation animation = new AlphaAnimation(0,1);
    animation.setDuration(3000);
    iv.setAnimation(animation); // may skip frames if not used in API19 (thats another problem)
    iv.startAnimation(animation);
} ....

在动画期间,Android 4.4.2 (API19) 在 ImageView 大小边界之外创建一个黑色遮罩,从 x/y 坐标 (0 + imageWidth / 0 + imageHeight) 开始,因此如果您最初将图像放置在该坐标之外,则不会看不到任何动画,只看到动画末尾的原始图像。为了重新创建问题,我将图像放置在 x = 50 中。在 Android 4.4.2 动画期间,您会看到图像的右半边是黑色的。您可以使用具有您喜欢的任何尺寸的屏幕设置的模拟器来重新创建。

将“lparam”从 WRAP_CONTENT 更改为 MATCH_PARENT 或其他宽度/高度不是解决方案。它应该与其他版本中的方式相同(注意我也在 4.4.3 和 4.4.4 中尝试过并且工作完美)。这可能是 4.4.2 java 代码动画的一个错误,因为如果你使用 XML 方法,它在 API19 上工作得很好。我需要一个解决方案或解决这个问题,因为我的整个项目基于纯java代码,并且不能排除KitKat 4.4.2作为项目的目标。

Thanks.

PD:> 有些人来这里是为了什么?纠正我的帖子没问题,但是会因此扣我-2分吗?不是我的问题的解决方案,如果我需要一些要点来附加与此问题相关的图像,则更多。谢谢你,CBredlow!

编辑:我需要上传解释此问题的图片,但由于它对新用户不太友好,只需点击此链接即可查看图像:


!解决了 !

由于某种原因,API19 编程式的纯 java 动画在使用绝对设置(如 setX() 或 setY())时效果不佳。专家们不妨看看这个。 API19 更喜欢在布局参数侧使用边距。

以下过程适用于android 4.4.2。当然,它适用于其他版本的上下版本,但你必须改变你的思维方式。您必须使用布局参数以编程方式放置图像,因此请更改:

iv.setX(50);
iv.setY(0);

to

lparam.setMargins(50, 0, 0, 0);
iv.setLayoutParams(lparam);
iv.requestLayout();

您还可以使用(对于 API >=17)

lparam.setMarginStart(50); // for x pos
lparam.setMarginEnd(0);  // for y pos

您必须调用“requestLayout()”以确保在将视图添加到父级 (fl) 时提交布局上的新更改。

最后,我错误地使用了“LayoutParams”而不是“FrameLayout.LayoutParams”。这与问题无关,也不会影响它,但这是定义它的正确方法,因此请更改:

LayoutParams lparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

to

FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);

任何 API 的完整工作代码是:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Common common = new Common(this, this);
    FrameLayout fl = new FrameLayout(this);
    ImageView iv = new ImageView(this);

    FrameLayout.LayoutParams flparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
    FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);

    iv.setImageBitmap(common.newImage("100x100.png", ImageFormat.RGB565).getBitmap());
    lparam.setMarginStart(50);
    lparam.setMarginEnd(0);
    iv.setLayoutParams(lparam);
    iv.requestLayout();

    fl.addView(iv);
    this.setContentView(fl, flparam);

    AlphaAnimation animation = new AlphaAnimation(0, 1);
    animation.setDuration(3000);
    iv.setAnimation(animation);
    iv.startAnimation(animation);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 4.4.2 仅在完整的 Java 代码动画期间在视图对象边界外部创建黑色遮罩 的相关文章

随机推荐

  • Sql 二进制到 C# - 如何在 C# 中获取与二进制等效的 SQL 二进制

    对你们来说这可能是一个愚蠢的问题 我有一个带有一个二进制列的 SQL 表 它有一些二进制格式的数据 e g 0x9A8B9D9A002020202020202020202020 它的等效英文表示是 test 是否可以转换这个string转化
  • 为什么 Visual Studio 2010 中的架构比较显示差异,而实际上没有差异?

    我本来希望Visual Studio 2010能够对Schema Comparison功能带来一些改进 我怀疑有一些 但我无法让一些基本的工作发挥作用 我从 SQL Server 2005 数据库中获取了一个架构 然后为了确保一切正常 我进
  • 将 android-maps-utils 与 ADT 结合使用

    我正在尝试在 Android 项目中使用这个库 1 并全新安装 ADT 我只是不知道该怎么办 该库似乎使用了一些 VCS 和名为 gradle 的东西 看起来是一个构建工具 有人可以告诉我使用全新安装的 ADT 将该库集成到自己的 Andr
  • 可执行 jar 中 Class.getResource() 和 ClassLoader.getResource() 的奇怪行为

    我的理解是从Class getResource 和 ClassLoader getResource 有什么区别 从自己的代码来看 getClass getResource path image png 与 getClass getClass
  • 使用 xml 映射的 Hibernate 派生属性

    我有一个Detectable类与Revisionsset 它们是 Hibernate 管理的 POJO 我还使用映射我的实体hbm xml文件 当用户转到Detectable管理屏幕 我想让他看到Detectable将数据存入表中 该表还包
  • 有没有办法在设置消费者时定义Azure服务总线规则/过滤器?

    在多租户系统中引入 Azure 服务总线和 MassTransit 时 我正在探索我的选择 基本上 该系统由多项服务组成 其中一些是特定于租户的 而另一些则是共享的 服务在内部保存数据 租户数据是隔离的 每个租户都运行相同的服务集 只是他们
  • 在 SCSS 中循环两个 @each 列表

    在我的 CSS 中 我必须创建引用 头发颜色 和 发型 的类 我写了一个 mixin 来帮助我的 CSS 编写更加高效 mixin hair hair colour hair colour hair background image url
  • CSS 中是否可以定位“无目标”?

    是否有 不存在片段标识符 的 CSS 选择器 相反的是 target 问题是 我正在制作一个文档 其中不同部分是可见的 具体取决于您提供的片段标识符 将其视为精灵文件 仅适用于 HTML 所以看起来像这样 section The first
  • EXCEL VBA 时间值格式(hh:mm am/pm)

    如何设置不带秒的 12 小时制时间值的格式 例如 上午 下午时 分 现在我正在使用Format TimeValue Now hh mm 但它不会显示上午 下午 提前致谢 更改格式字符串以包含以下指示符AM PM 基于VBA 格式函数文档 看
  • 如何在水平条上显示值

    我生成了一个条形图 如何在每个条形上显示条形的值 当前情节 我想要得到什么 My code import os import numpy as np import matplotlib pyplot as plt x u INFO u CU
  • 如何通过 Spring Security 和 LDAP 使用“记住我”身份验证?

    我想使用 Spring Security 的 记住我 和 LDAP 身份验证 LDAP认证配置说明here 我刚刚做了一些微小的改变 您能向我解释一下如何在该配置中添加 记住我 吗 或者 也许您可 以给我一个描述如何操作的示例 谢谢 您实际
  • LINQ to Entities 选择多对多关系中的所有条目

    我有 3 个 MySql 表 Students Classes and StudentsInClasses 实体框架将它们转换为两个实体Student and Class 每个都通过多对多导航属性链接到另一个 例如Student Class
  • 提取两个双引号之间的所有数据

    我正在尝试使用 powershell 正则表达式从 AssemblyInfo cs 文件中提取版本数据 下面的正则表达式是我最好的尝试 但它只能拉动字符串 assembly AssemblyVersion 我已经将这个正则表达式放入几个网络
  • 詹金斯的空手道选项

    我正在尝试运行来自詹金斯的代码 在目标和选项中给出特定标签 但它失败并出现以下错误 您能否验证语法并让我知道如何解决此问题 无法在项目 karate boilerplate 上执行目标 org apache maven plugins ma
  • 使用 Pcap 进行超时监听

    我想在 Linux 上使用 C 语言的 Libpcap 编写一个小应用程序 目前 它开始嗅探并等待数据包 但这并不是我真正需要的 我希望它等待 N 秒然后停止监听 我怎样才能做到这一点 这是我的代码 void got packet u ch
  • 如何按常见项目对元组进行分组并查找每组的平均值

    我有一个名为的元组列表data data A 2 B 2 B 4 B 6 B 8 B 6 B 4 B 3 C 10 C 10 C 10 D 12 E 12 F 10 F 8 F 6 average 我想要每个相同字母的平均值 预期输出 av
  • 线程之间的 Qt 连接类型:为什么会这样?

    在尝试使多摄像头系统与处理不同摄像头的不同线程一起工作时 我无法使信号和插槽在不同线程之间正常工作 我知道发送信号的对象和相关槽的对象位于不同的线程中 因此我知道我可能只需要为连接找到合适的 连接类型 参数 最终 我发现只有使用 Qt Di
  • 单独元素的边距如何影响固定元素的位置?

    我有两个独立的DIVs one position fixed用于通知栏 一个用于主容器 当我给出container some margin top 这也推送了我的通知栏 这是一个小提琴 http jsfiddle net Zh9k8 2 而
  • 将 OpenStreetMaps 与 Cordova 集成

    我想知道你们是否知道如何将开放街道地图 OSM 与科尔多瓦一起使用 这几天都在找 我能得出的结论是 我不应该直接使用 OSM 的 API 因为如果我有太多调用 他们的服务器会阻止我 所以有免费的开源名称 例如 1 Openlayers 2
  • Android 4.4.2 仅在完整的 Java 代码动画期间在视图对象边界外部创建黑色遮罩

    在这方面确实需要一些帮助 请看一下这个简单的 ImageView 淡入动画 使用完整的 java 代码 使用 API 21 18 17 16 重新创建它 效果非常好 现在尝试使用 API 19 android 4 4 2 创建有趣的掩码 参