使用Android绘制自定义视图

2023-12-30

我正在我的应用程序中绘制一个自定义视图,该视图基本上将参数(XML)作为要显示的文本,然后继续无限旋转它。

当我进行这个控制时,我有一些疑问我想问:

  • 我已经制作了 2 个样式属性,我已在attrs.xml文件。这些属性是设置我的控件中使用的圆的宽度和宽度。我将在 ondraw 方法和 onmeasure 方法中使用这些值。我通过声明这些来运行我的程序,但出现一个错误,要求我输入android:width and android:height属性。我的问题是,如果我已经使用自定义属性来定义视图的高度和宽度,为什么我需要这些

  • 我正在 Mac 上编码。现在当我在做我的attrs.xml文件,获取我们通常通过 ctrl+space 获取的自动完成列表没有显示。这是为什么。例如,我想知道我可以为自定义属性的格式属性赋予什么值,就像我在下面演示的那样:<attr name ="somename" format="value I wanted to find out through autocomplete">。为什么不弹出自动完成功能?当我制作 .java 文件时,它确实会弹出。

  • In my ondraw()我想画一个圆的方法。现在为此我需要圆心的坐标。所以我所做的就是输入 0, 0。但这不正确。我希望圆圈位于它所在的父视图的中心。因此,如果我的视图位于层次结构中,我希望它尊重这一点。我想给出相对于父视图的坐标。现在发生的事情是它被绘制在我屏幕的左上角。这就是我不想要的。我该怎么做才能实现这一目标?


如果我已经使用自定义属性来定义视图的高度和宽度,为什么还需要这些?

这是因为 Android 需要知道如何以及将视图放置在布局中的位置。您可以通过覆盖来实现视图以利用自定义高度/宽度要求View.onMeasure() http://developer.android.com/reference/android/view/View.html#onMeasure%28int,%20int%29返回您自己的尺寸参数。然后你可以设置android:layout_width="wrap_content" android:layout_height="wrap_content"在你的布局文件中。

为什么不弹出自动完成功能?当我制作 .java 文件时,它确实会弹出。

Android xml 文件的自动完成和自动文档实现充其量是不稳定的,因此它不起作用也就不足为奇了。我不知道有修复,据我所知这是一个 IDE 错误。

在我的 ondraw() 方法中我想绘制 一个圆圈。现在为此我需要 的中心坐标 圆圈。所以我所做的就是输入 0, 0。但是 这是不正确的。我想要圈子 位于父视图的中心 所以如果我的观点是 我希望它尊重这一点。我 想要给出相对坐标 到父视图。发生了什么事 现在它正被绘制在 我屏幕的左上角。这 这是我不想要的。我该怎么做 达到这个目的吗?

如果您正确实现了 onMeasure(),则应该已经处理了相对于父级的坐标。要获得视图的中心,请使用以下代码:

void onDraw(Canvas canvas)
{
int centerX = this.getWidth() / 2;
int centerY = this.getHeight()) / 2;
//..draw code here
}

Edit
这是一个带有源代码的示例,应该会有所帮助:http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/ http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/

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

使用Android绘制自定义视图 的相关文章

随机推荐

  • 使用 tomcat 9 创建访问文件的符号链接 - 不起作用

    我正在将 tomcat 7 迁移到 tomcat 9 0 33 下面是 tomcat 7 的符号链接访问配置 但该链接在 tomcat 上不起作用 任何人都可以建议如何解决此问题
  • StAX - 如何将 XMLInputFactory.IS_VALIDATING 设置为 true?

    这是我第一次使用 StAX 来解析 XML 文档 仍处于学习阶段 在使用 XMLStreamReader 解析 XML 文档并使用 XMLStreamWriter 生成文档副本的过程中 我遇到了以下警告 在编写器的输出中以注释形式表示 我理
  • elasticsearch 进程的最大文件描述符 [4096] 太低,至少增加到 [65536]

    使用Ubuntu 16 10 码头工人1 12 3 Docker 作曲家 1 8 官方elastic docker镜像的elastic最新标签 docker compose yml version 2 services elastic im
  • mach_vm_region_recurse,在 osx 上映射内存和共享库

    我使用 vm region recurse 64 来映射给定进程的内存 vmmap 样式 然而 尝试通过检查内存中每个库的 Mach O 标头来获取应用程序加载的共享库的完整列表 但 vm region recurse 似乎与 vmmap
  • java TreeSet:比较和相等

    我想要使 用属性 sort 1 排序的对象列表 但是当我想删除时 我希望它使用属性 id 下面的代码代表了这个问题 package javaapplication1 import java util TreeSet public class
  • Java 中有有序集的实现吗?

    如果有人熟悉 Objective C 有一个名为的集合NSOrderedSet https developer apple com library ios documentation Foundation Reference NSOrder
  • 在 xargs 变量上使用 sed 在 shell 扩展内不起作用

    我正在尝试在 Redis 中进行批量密钥重命名 使用 shell 来替换每个密钥名称 在redis内部似乎没有更好的方法来做到这一点 redis cli n 5 KEYS staging xargs I echo RENAME echo s
  • 在哪里可以找到 WSDL.exe?

    我有 Visual Studio 2010 Ulitmate 带有 MSDN Premium 但我似乎找不到这个文件 我尝试安装 Visual Studio SDK 但似乎找不到该文件 我看过 C Windows Microsoft NET
  • 本地主机在 Chrome 中无法工作,127.0.0.1 可以工作

    我正在尝试运行本地节点服务器 但出于某种原因localhost 3000不起作用 错误页面指出This webpage is not available ERR CONNECTION CLOSED然而 127 0 0 1 3000确实有效
  • opencv中图像的二值化

    我在图像二值化方面遇到问题 通常可能模糊 我有这个图像 完成二值化后我得到 我怎样才能更好地进行二值化 我的目标是只有黑色背景和白色字母 没有其他东西 我使用了自适应阈值二值化 cv2 adaptiveThreshold image gs
  • 如何在 ASP.NET C# 中从 Mailgun 接收 HTTP POST?

    http documentation mailgun net quickstart html http documentation mailgun net quickstart html包含 Django 中 http 处理程序的一些示例代
  • 打开deploy.prototxt时出现运行时错误

    我正在尝试使用 caffe 运行一个应该打开的简单代码deploy prototxt但它无法打开文件并引发此错误 RuntimeError Could not open file home ebadawy git caffemodels b
  • XSD 和多态性

    我有点重复这个问题第一次被错误地问到 我有这个
  • 使用一个 NetStream 对象同时传输两个 Video 对象

    我试图将单个 NetStream 对象附加到两个单独的视频对象 而不是从服务器拉出冗余流 预期的行为是两个视频显示相同的内容 但是 我附加 NetStream 的最后一个视频似乎是唯一会显示内容的视频 还有其他人遇到过这个吗 如果不需要 我
  • 白色背景的错误屏幕

    当 iOS 上的 React Native 出现异常时 我会看到带有白色背景的错误屏幕 您可以通过点击的单元格看到它实际上具有异常堆栈 只是具有白色背景 不知道为什么会发生这种情况 但是有办法解决吗 在 Android 上 屏幕有红色背景
  • 如何访问 TTestSetup 类中 TTestCase 的字段

    我正在使用 DUnit 创建单元测试 我有一个类需要很长时间才能初始化 我从 TTestSetup 派生一个类 TMyTestSetup 并重写其 Setup 方法 对于我的 TTestCase 中的所有测试 仅调用此 SetUp 方法一次
  • 无法连接到 Dockerfile 中的 Wildfly

    我正在创建一个自定义 Dockerfile 其中包含官方 keycloak docker 映像的扩展 我想更改网络上下文并添加一些自定义提供程序 这是我的 Dockerfile FROM jboss keycloak 7 0 0 COPY
  • 屏幕截图不提供整个屏幕的图像

    我正在制作与图像相关的应用程序 我的屏幕上有多个图像 我已经拍了屏幕截图 但它不应该提供我的整个屏幕 最顶部和最底部的一小部分不需要在其中显示 我的顶部有导航栏 底部还有一些按钮 我不想在屏幕截图中捕获该按钮和导航栏 下面是我的屏幕截图代码
  • 正交相机并通过光线投射选择对象

    我在使用光线投射器使用正交相机选择对象时遇到了一些困难 不过 当我使用透视相机时 我没有任何问题 在两者之间切换时 我唯一要改变的是相机类型 我可以在正交视图上选择面 但它仅与我在屏幕上单击的位置松散相关 当我可以在远离物体的地方点击时 它
  • 使用Android绘制自定义视图

    我正在我的应用程序中绘制一个自定义视图 该视图基本上将参数 XML 作为要显示的文本 然后继续无限旋转它 当我进行这个控制时 我有一些疑问我想问 我已经制作了 2 个样式属性 我已在attrs xml文件 这些属性是设置我的控件中使用的圆的