【问题标题】:Android Drawable: layer-list repeat bitmap does not load when entirely coveredAndroid Drawable:完全覆盖时不加载层列表重复位图
【发布时间】:2011-06-18 23:23:02
【问题描述】:

我有一次加载三个全屏周视图(上一个、下一个、当前)。每个周视图都有 7 列(一周中的每一天),具有可绘制的背景。

我的可绘制资源背景是

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Grey border on left and right --><item><shape><solid android:color="#999"/></shape></item>
    <!-- White background (.5pt to not cover border) --><item android:left=".5pt" android:right=".5pt"><shape>solid android:color="#FFF"/></shape></item>
    <!-- Image that repeats to make a grid --><item android:left=".5pt" android:right=".5pt"><bitmap android:src="@drawable/grid" android:tileMode="repeat" android:gravity="center" /></item>
    <!-- Times that align left. (12AM, 1AM, etc) --><item android:left="1pt" android:right=".5pt"><bitmap android:src="@drawable/grid_times" android:gravity="top|left|clip_horizontal" /></item>
</layer-list>

由于某种原因,如果我将三组七个放在一起,则只有前面(可见的一组)会得到重复的图像(实际上是一个 gif)。如果我把前面移过来,你可以看到其他人没有得到重复的图像

详情

布局是RelativeLayout,子类是RelativeLayout的三个子类。这三个子类彼此相同并覆盖dispatchTouchEvent,从而允许它们被拖动。它们从彼此顶部开始,因此只有前面的可见。它们几乎完全相同,只是其中一个在顶部(起初)。

这是android的顶视图

                ' first    '
                ' second   '
                ' third    '
                |          |#<-- The android screen boundaries. Only third is visible.

                   ^ ^ ^
                    user
                  looking
                  forward

当用户用手指拖动视图时,它会像这样结束(用户可以看到左侧第一个窗格(前一周)的一点点)

       ' first    '
                           ' second   '
                  ' third    '
                |          |

另一种方式看起来像这样(用户可以看到第二个窗格的一点点(下周))

     ' first    '
                         ' second   '
              ' third    '
                |          |

当用户放手时,他们会捕捉到这个位置(现在,当我们修复这个问题时它会改变)

     ' first    '
                           ' second   '
                ' third    '
                |          |

【问题讨论】:

  • 为什么不在 ScrollView 中并排创建 3 个视图?
  • 我想我可以做到的。但我决定不这样做。基本上我可以使用 ScrollView,但如果我一直向左滚动,我将不得不跳过滚动以允许用户进一步向左移动。这是一个日历系统,因此用户可以通过反复向左滑动来几乎无限地回到过去。如果我知道我会遇到位图问题,我可能会这样做。我当然需要隐藏滚动条,否则它看起来很傻。 See my other question on the subject if you are interested.
  • 我以为您只希望显示 3 个面板,但是如果您想显示很多项目并且还想快速定位,我建议您使用具有项目屏幕大小的画廊,这样您就可以将项目添加到图库,它将为您处理所有滚动。
  • 只有三个面板,当我向左滚动时,最右边的面板会移动到当前面板的左边,并且它的数据会被更新。这在链接的问题中有所描述。 “这就是我不能使用 Horizo​​ntalScrollView 的原因”。我不知道画廊是否会工作。它是否允许我从一侧移除物品并将它们添加到另一侧?出于内存和性能原因,一次渲染的项目数应限制为 3,并且我希望在用户向左或向右滑动时产生动画效果。
  • 图库将仅保留可见面板以及下一个和上一个在内存中,例如,您可以在一年中的月份在图库中拥有 12 个项目,并选择编号为 7 的项目七月,因此如果用户向左或向右滚动,画廊将要求显示视图。至于动画,Gallery 就像一个水平 ListView,所以你只得到一个滚动,在滚动停止时它有一个简单的动画来使项目居中。我认为您想要的方式就是画廊,但人们认为画廊仅用于图像,但可以用于任何视图和布局。

标签: android bitmap drawable repeat


【解决方案1】:

当你移动前面的,invalidate() 其他的,所以他们加载drawable。

【讨论】:

  • 一有机会我会测试的。
  • Android 不自动执行此操作的原因是您将看到它会导致明显的延迟
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 2013-06-19
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多