【问题标题】:Android delete off screen imageViewsAndroid 删除离屏 imageViews
【发布时间】:2015-07-18 18:26:29
【问题描述】:

所以我在 LinearLayout 中有一个以编程方式创建的 ImageView,并且有两个按钮。

一个按钮使用 TranslateAnimation 使 ImageView 向左移动。 另一个按钮使用 TranslateAnimation 使 ImageView 向右移动。

我希望它在 ImageView 移出屏幕时被删除。

我知道有一个名为 removeView 的方法,您可以在其中将视图传递给它的参数并删除视图,但我不知道如何检查 ImageView 是否在屏幕外。

简而言之,这就是我想做的事情

if(imageView.isOffScreen()){
     linearLayout.removeView(imageView);
}

除了 isOffScreen() 不是真正的方法,我找不到任何用于 ImageViews 的方法来检查它是否在屏幕外。

TLDR: 如何检查 ImageView 是否在屏幕外? (屏幕外,我的意思是你不能再在手机屏幕上看到它了。)

【问题讨论】:

    标签: java android


    【解决方案1】:

    由于您使用的是 TranslateAnimation,如果您已经知道在动画结束时您的视图将离开屏幕,那么您可以设置一个 AnimationListener,它会在动画结束时从视图树中删除视图完成了。

    yourAnimation.setAnimationListener(new AnimationListener() {
    
        public void onAnimationStart(Animation anim) {};
    
        public void onAnimationRepeat(Animation anim) {};
    
        public void onAnimationEnd(Animation anim) {
            linearLayout.removeView(imageView);
        };
    
    });      
    

    这样您就不必在任何时候检查视图的位置,您只需在动画完成后将其移除。

    顺便说一句,您是否有理由要删除视图,而不是将 Visibilty 设置为 GONE?

    【讨论】:

    • 我认为删除整个 imageView 而不是将其可见性更改为 GONE 会更好(性能方面)。
    • 这取决于许多因素。虽然在渲染周期中仍会访问正在消失的视图,但它不会有任何工作要做。移除视图,假设所有对它的引用都消失了,它将使其有资格进行垃圾收集,这本身就有可能使应用程序感觉更笨重且响应速度更慢。无论如何,AnimationListener 是否适合您的目的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2021-10-12
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    相关资源
    最近更新 更多