【问题标题】:Android: Update ImageView Background while Behind other ImageViewAndroid:在其他 ImageView 后面更新 ImageView 背景
【发布时间】:2016-06-07 19:33:03
【问题描述】:

我正在构建一个应用程序,我想在其中滑动图像,就好像它们是堆栈上的照片一样。换句话说,如果我滑动顶部的图像,我希望它在滑动方向上移动,并使其下方的下一个图像始终可见。为此,我使用了一个FrameLayout 和两个ImageView 容器。我只是在交替哪个在上面。同时,一旦发生滑动,下一张图像就会使用setBackground(drawable) 加载到后面的ImageView。我的问题是后面的ImageView 直到我调用bringToFront() 才更新它的图像,这意味着由于顶部ImageView 正在动画,所以在动画完成之前,下面的图像是不正确的,此时点它突然变为正确的图像。我试过在setBackground(drawable) 之后在后面的ImageView 上调用invalidate(),但这不起作用。有人对我如何在图像落后时更新图像有任何想法吗?

更新:原来我今天不是很在意。我更新了错误的ImageView,并且因为图像加载是在网络之外完成的,所以有足够的延迟让我认为它是在动画完成后发生的。

【问题讨论】:

    标签: android android-layout imageview android-animation android-framelayout


    【解决方案1】:

    在我看来你想做一个图像滑块之类的东西。

    为此目的存在很多很棒的库,例如这个:

    https://github.com/daimajia/AndroidImageSlider


    如果你不想使用它,这里有一些提示:

    • ImageViews 上的图像设置为 setImageDrawable(Drawable)

    • 当您的动画开始时,将新图片设置为您后面的ImageView,然后将可见的图片滑开。

    • 当可见ImageView滑开时,将其可见性设置为GONE并将其移到第二个ImageView后面

    每次加载新图像时都执行此操作。

    这应该确实有效。

    【讨论】:

    • 我将不得不研究 AndroidImageSlider,但同时这些步骤基本上正是我正在做的。我从setBackground(drawable) 更改为setImageDrawable(drawable),但没有任何区别。其他两个步骤是我正在做的。我认为问题在于ImageView 不会更新它的图像,除非它的 z 位置在顶部,或者无论如何。我只是不知道如何在它位于顶部之前强制它重绘。
    • 我感到羞愧...原来我更新了错误的ImageView,所以这就是导致问题的原因。我会投票赞成你是对的,但我没有足够的声誉。感谢您的帮助!
    【解决方案2】:

    你需要一个“ViewPager”

    https://developer.android.com/training/animation/screen-slide.html

    它具有容纳“N”张图像的所有必要句柄 - 还支持多个滑动动画 - 默认处理程序 - 高效的内存管理 - 预取 - 你都在享受这个盛宴!!

    只要确保在“ViewPager”上开发的“页面”布局中获得“ImageView”即可。

    【讨论】:

    • 感谢您的回复!我一直在考虑做一个 ViewPager 但不想要那么多片段事务。再次感谢!
    • @Nick 你有什么理由不想要片段交易?它只会通过独立的生命周期使您的应用程序变得更好,并且当用户滑动图像时会自动进行预取
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多