淡化ImageView

时间:2015-02-20 19:18:53

标签: java android multithreading

所以我想设置一个ImageView alpha。我试图使它与api 14兼容,所以我必须使用.setAlpha()

无论如何问题很简单我希望它以可见的方式淡出,但我所拥有的线程不允许UI更新。我需要在UI线程上运行它,但我需要让线程暂停一点,这样用户才能看到褪色......

现在没有可见的褪色,只是跳过下面的代码。我只需要一种方法让它淡出并让它在UI线程上更新。

***需要更新UI线程并使用暂停更改alpha以便用户可以看到alpha更改

public void onFadeClick(View view) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            ImageView img = (ImageView) findViewById(R.id.imageView);
            for (int i = 100; i > 0; i--) {
                try {
                    img.setAlpha(i);
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            for (int i = 0; i < 100; i++) {
                try {
                    img.setAlpha(i);
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

只需通过XML

执行此操作

fade.xml

中创建res/anim
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<alpha
    android:duration="1000"
    android:fromAlpha="0.0"
    android:repeat="reverse" //for playing back again.
    android:repeatCount="0" // for playing infinitely
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toAlpha="1.0" />

</set>

然后在你的代码中

Animation anim = Animation.loadAnimation(R.anim.fade);
youImageView.startAnimation(anim);