加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在循环中更改图像 – Android

发布时间:2020-12-15 05:00:04 所属栏目:Java 来源:网络整理
导读:我想知道为什么我仍然无法想办法做到这一点.虽然看起来很简单,但我花了整整一天的时间.但不能这样做. 我有一组骰子图像. 1.png,2.png,….和6.png. 我的布局中有一个ImageView.那是, ImageView dice = (ImageView) findViewById(R.id.imageViewrollingdiceOne
我想知道为什么我仍然无法想办法做到这一点.虽然看起来很简单,但我花了整整一天的时间.但不能这样做.

我有一组骰子图像. 1.png,2.png,….和6.png.
我的布局中有一个ImageView.那是,

ImageView dice = (ImageView) findViewById(R.id.imageViewrollingdiceOne);

在这里,我想快速更改此imageView以查看使用上述6个图像的某种视觉/动画.为此我写下了一段代码.

代码1:

for (int j=0;j<10;j++){
        int randomNum = random.nextInt(6);
            System.out.println("Random Value " + randomNum);
            dice.setImageResource(images[randomNum]);               
    }

输出:

没有视觉效果. imageView保持不变,并在循环最后一次迭代时突然改变.
我认为这是因为循环执行速度非常快.
然后我做了以下.

代码2:

for (int j=0;j<10;j++){
        int randomNum = random.nextInt(6);
            System.out.println("Random Value " + randomNum);
            dice.setImageResource(images[randomNum]);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }               
    }

输出:

再一次没有视觉效果. imageView保持不变,并在循环最后一次迭代时突然改变.
然后我做了以下.

代码3:

final Handler localHandler = new Handler();
    Runnable runnableObject = new Runnable() {
        public void run() {
            final ImageView dice = (ImageView) findViewById(R.id.imageViewrollingdiceOne);
            int randomNum = random.nextInt(6);
            System.out.println("Random Value" + randomNum);
            dice.setImageResource(images[randomNum]);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    };
    for (int j=0;j<10;j++){
        localHandler.postDelayed(runnableObject,1000);
    }

再一次没有视觉效果. imageView保持不变,并在循环最后一次迭代时突然改变.在所有三种情况下,logcat都没有任何错误.

我发现线程也不能解决问题.

解决方法

首先,android中已经有一个动画集,它可以帮助你在调用 FrameAnimation之后获得你想要的东西,下面是一个如何使用它的例子:

FrameAnimation Example

你的第一,第二和第三个代码在主线程中运行,你不应该在主线程中使用sleep!

如果您仍想手动设置图像资源,可以使用以下代码:

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            int randomNum = random.nextInt(6);
            dice.setImageResource(images[randomNum]);
            handler.postDelayed(this,500);
        }
    },500);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读