android - 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
我如何才能听到真正向用户显示图像的事件?名字的实际效果是我想要的,但是可以看到大多数照片在可见之前就被切换了
解决方案
推荐阅读
- javascript - 将元素定位到第三方元素
- karma-jasmine - Karma 没有运行特定的测试文件。相反,它运行所有测试文件
- c# - Azure 功能 401 RestSharp 未经授权的问题
- amazon-web-services - AWS Elastic Beanstalk 上的 Docker 端口映射
- php - 如果不是在 PHP 代码中,为什么 div 在结果 HTML 中会获得一个额外的“style=padding...”属性?
- vue.js - vue.js :单击一个按钮,查看 dom,找到所有具有特定类名的类,并将一个新类附加到现有的类列表中
- c++ - 在 C++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- tensorflow - 如何在 tf-ranking 框架中实现不同的排名算法?
- javascript - 如何将数组的一部分转移到新行?
- python - 如何使用 python 请求发送嵌套查询参数