gpt4 book ai didi

java - Android 自定义 View 未绘制且 Canvas 最大尺寸

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:35 25 4
gpt4 key购买 nike

我正在开发一个具有嵌入式聊天功能的应用程序。为了在显示文本的位置绘制气泡*,我使用了从 FrameLayout 扩展的自定义 View ,就像这里一样:

https://github.com/florent37/ShapeOfView/blob/master/shapeofview/src/main/java/com/github/florent37/shapeofview/ShapeOfView.java

或这里:

https://github.com/MasayukiSuda/BubbleLayout/blob/master/bl/src/main/java/com/daasuu/bl/BubbleLayout.java

*bubbles -> 你知道:圆角矩形,左侧或右侧有一个小箭头,具体取决于消息的撰写者

问题是,如果要显示的消息足够长(几千个字符,具体取决于手机的内存),则不会再显示背景绘图。

我发现这是预期的,因为我超出了最大 Canvas 尺寸(在本例中为最大高度)

我知道 Android 中 Canvas 的最大尺寸取决于您测量它的手机。例如,这是旧手机(Moto G 第一代)的限制:

enter image description here

这是具有更多内存的新型手机的限制:

enter image description here

问题:你能想到另一种方法,定义一个任意形状的 View 作为背景来克服这个限制吗?

PD:是的,代码看起来很奇怪,因为我使用 xamarin 进行开发,但问题很普遍,而且我不关心解决方案的语言(如果确实存在):)

更新添加了示例代码来重现此问题。

您只需在 xml 中创建任何背景,假设我们将其称为“bubble_background.xml”:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

然后将其用作 TextView 的背景,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/cell_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:autoLink="all"
android:linksClickable="true"
android:textSize="@dimen/atlas_text_size_message_item"
android:layout_marginRight="8dp"
android:layout_marginLeft="8dp"
android:background="@drawable/bubble_background" />
</LinearLayout>

现在,如果您的文本足够长,背景将不可见(最好将 TextView 包装在 ScrollView 中...)

更新这是@cherryBu 建议的背景测试结果当然,我得到了相同的结果,因为这正是我正在做的事情,但我仍然必须测试它,以防万一,你知道这是怎么回事......:)

enter image description here

带有圆角的顶部和底部细长矩形以及右侧的小三角形(全部为蓝色)是我当前解决方案的一部分(该解决方案并不让我高兴,但有效:我通过使用这 3 个部分图像组合气泡并将文本的背景设置为相同的颜色来“绘制”气泡)。文字是白色的,这就是为什么你看不清它的大部分内容。在当前代码中,我将背景设置为蓝色(不是图像,因为它无法再次绘制:) -,只有纯色;与您在“气泡”的其他部分中看到的相同)

最佳答案

bubble_background.xml:

<?xml version="1.0" encoding="utf-8" ?>
<!-- For all properties see: http://developer.android.com/guide/topics/resources/menu-resource.html -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomLeftRadius="20dp"
android:bottomRightRadius="20dp"
android:topLeftRadius="20dp"
android:topRightRadius="20dp" />
<padding
android:bottom="50dp"
android:left="50dp"
android:right="50dp"
android:top="50dp" />
<stroke android:width="10dp" android:color="#B2F7FE"/>
<solid android:color="#ffffff" />
</shape>

我使用它作为 TextView 背景,我在其中添加了很长的文本,但形状仍然存在。

更新:

enter image description here

关于java - Android 自定义 View 未绘制且 Canvas 最大尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57042093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com