ImageView没有用位图更新?

时间:2012-12-15 10:06:44

标签: android

为什么我的imageview没有在for循环中更新,只有最后一个url的图像在imageview中显示的并不是所有的图像,我做错了什么?

public class LoadImageActivity extends Activity {
    ImageView image_view;
    Bitmap bitmap;

    String[] imageLocation={
            "http://wallbase1.org/thumbs/rozne/thumb-499842.jpg",
            "http://ns3002439.ovh.net/thumbs/rozne/thumb-2493796.jpg",
            "http://ns3002439.ovh.net/thumbs/rozne/thumb-2486664.jpg" };  

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        image_view = (ImageView)findViewById(R.id.imageview);

        for (int i = 0; i < 2; i++) {
            bitmap = loadImage(imageLocation[i]);
            image_view.setImageBitmap(bitmap);

            Animation rotate = AnimationUtils.loadAnimation(LoadImageActivity.this, R.anim.rotate);
            findViewById(R.id.imageview).startAnimation(rotate);
        }
    }

    public  Bitmap loadImage(String image_location){
        URL imageURL = null;
        try {
            imageURL = new URL(image_location);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            HttpURLConnection connection = HttpURLConnection)imageURL.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream inputStream = connection.getInputStream();

            bitmap = BitmapFactory.decodeStream(inputStream);//Convert to bitmap
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}

4 个答案:

答案 0 :(得分:1)

嗯,首先,您在两个成功的代码行中(有效地)在图像之间切换的设备有多慢?

其次,系统必须首先进行布局,这在onCreate()返回后发生。你做的是:

-set reference to bitmap that will be shown when layouted
-changed that reference
-let the system do the layout (Question: Which reference will be read?)

看起来您想要设置第一个位图,旋转它然后设置另一个位图。 你需要做的是:

-set bitmap
-start animation with an Animation.AnimationListener, which sets the second bitmap in onAnimationEnd().

@谢谢亚当!

答案 1 :(得分:0)

您可以在第一个动画上放置Animation.AnimationListener,然后可以加载下一个图像并在侦听器的onAnimationEnd(...)方法中开始新的转换。

答案 2 :(得分:0)

尝试设置基础对象(位图),然后更新ImageView。

答案 3 :(得分:-1)

方法loadImage()不在UI主线程中,使用处理程序用新图像更新ImageView。