首页 > 解决方案 > Android监听器imageview有效绘制

问题描述

我正在创建一个 android 应用程序,让人们从一组(抽奖)中抽出名字。

我想创建一个动画,在按下按钮后,应用程序会在名称之间随机移动,并在短时间内显示它们(带照片),它们会替换下一个并不断(就像抽奖效果)

NAMES的效果很好,我遇到的问题是图像

我要做的是:

 final View drawingView = LayoutInflater.from(this).inflate(R.layout.winner_inspect_layout, null);
        new AlertDialog.Builder(this).setView(drawingView).show();

        final AppCompatImageView ivPhoto = drawingView.findViewById(R.id.winnerPhoto);
        final AppCompatTextView txName = drawingView.findViewById(R.id.winnerName);
        final AppCompatTextView txComment = drawingView.findViewById(R.id.winnerComment);


        ivPhoto.getViewTreeObserver().addOnGlobalLayoutListener(new Puzzler(ivPhoto, txName, txComment, validTickets, 6000));
        ivPhoto.forceLayout();

并且Puzzler确实:

 @Override
        public void onGlobalLayout() {
            Comment ticket = this.tickets.poll();
            this.txName.setText(ticket.getId() + "");
            this.txComment.setText(ticket.getText());

            Picasso.get().load(ticket.getProfilePhotoUrl()).fit().into(this.ivPhoto);

            if (System.currentTimeMillis() - this.startTime > this.maxTime || this.tickets.isEmpty()) {
                ivPhoto.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                annouceWinner(ivPhoto);
            }

        }

因此,我确实在 imageview 上观看了全局布局,该方法将在整个图像可见后被调用......但实际发生的是在图像可见之前调用该方法......所以有可能看到名字互相切换,但是图片在整个过程中只能看到1个或2个...

我制作了一个非常非常短的视频来展示效果(请花 15 秒观看)
https://youtu.be/nxykGdBwIeM

我如何才能听到真正向用户显示图像的事件?名字的实际效果是我想要的,但是可以看到大多数照片在可见之前就被切换了

标签: androidandroid-layoutandroid-animation

解决方案


推荐阅读