如何使用一些预定义的time_interval自动从ImageView中的URL更改图像?

时间:2012-08-16 12:52:47

标签: android ui-thread

这是我的主要课程:

$ `public class MainActivity extends Activity实现了Runnable {

ImageView im1,im2,im3;
int b,p=0,j,k,l;
String b1 ;
Bitmap img;
Bitmap bm;
ArrayList<String> arl = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    im1 = (ImageView)findViewById(R.id.imageView1);
    im2 = (ImageView)findViewById(R.id.imageView2);
    im3 = (ImageView)findViewById(R.id.imageView3);

    arl.add("http://dev.purpletab.com/files/jewels/original/Jewel_1344148107.png");
    arl.add("http://dev.purpletab.com/files/jewels/original/Jewel_1332428944.png");
    arl.add("http://dev.purpletab.com/files/jewels/original/Jewel_1341902610.png");

    while(p<1)
    {
      for(j=0;j<3;j++)
      {

        Bitmap bitmap1 = DownloadImage(arl.get(j));
        Log.e("image of j : ", ""+bitmap1);
        im1.setImageBitmap(bitmap1);
        delay();

        k=j+1;
        if(k==3)
            k=0;
        Bitmap bitmap2 = DownloadImage(arl.get(k));
        Log.e("image of k : ", ""+bitmap2);
        im2.setImageBitmap(bitmap2);
        delay();

        l=k+1;
        if(l==3)
            l=0;
        Bitmap bitmap3 = DownloadImage(arl.get(l));
        Log.e("image of l : ", ""+bitmap3);
        im3.setImageBitmap(bitmap3);
        delay();

      }         
    p++;
    }
}
private void delay()
{
     Thread t = new Thread()
     {
        public void run() 
        {
             Log.e("entered thread", " entered run method");

             try
                    {
                        Log.e("entered for loop ", "loop : ");
                        Thread.sleep(10000);
                    }
                catch(Exception e)
                    {
                    Log.e("thread error", ""+e);
                    }

        }

     };
     t.start();
     Log.e("started thread", ""+t);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

private Bitmap DownloadImage(String URL)
{        
    Log.e("bitmap d/l",""+URL);
    Bitmap bitmap = null;
    InputStream in = null;        
    try 
    {
        in = OpenHttpConnection(URL);
        bitmap = BitmapFactory.decodeStream(in);
         Log.e("downloaded images ", " images ");
        in.close();
    } 
    catch (IOException e1) 
    {
        e1.printStackTrace();
         Log.e("started thread", ""+e1);
    }
    return bitmap;                
}

private InputStream OpenHttpConnection(String urlString)throws IOException
{
    InputStream in = null;
    int response = -1;

    URL url = new URL(urlString);
    URLConnection conn = url.openConnection();

    if (!(conn instanceof HttpURLConnection))throw new IOException("Not an HTTP connection");

    try
    {
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        httpConn.setAllowUserInteraction(false);
        httpConn.setInstanceFollowRedirects(true);
        httpConn.setRequestMethod("GET");
        httpConn.connect();
        response = httpConn.getResponseCode();                
        if (response == HttpURLConnection.HTTP_OK) 
        {
            in = httpConn.getInputStream();  
             Log.e("download in progress", " . . . ");
        }
        else if(response != HttpURLConnection.HTTP_OK)
        {
            //ProfileImgPreview.setBackgroundResource(R.drawable.photo_bg);
        }
    }
    catch (Exception ex)
    {
        throw new IOException("Error connecting");            
    }
    return in;    
}
@Override
public void run() {
     Log.e("started the other thread", "not defined");

}

}`

这是我的布局代码:

$`

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:contentDescription="@string/app_name"
    android:src="@drawable/a0"/>

 <ImageView
    android:id="@+id/imageView2"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/imageView1"
    android:contentDescription="@string/app_name"
    android:src="@drawable/a1"/>

  <ImageView
    android:id="@+id/imageView3"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/imageView2"
    android:contentDescription="@string/app_name"
    android:src="@drawable/a2"/>

`

因此,当我运行此代码时,只会查看最后一张图像,并且图像不会根据给定的延迟而改变。我的意思是最后的图像作为静态图像加载,但我需要它作为动画视图。任何人都可以回答我吗?

先谢谢你。 。 。 。 。

1 个答案:

答案 0 :(得分:0)

你的延迟函数没有什么可以延迟onCreate,它只是在后台启动一个什么都不做的线程。 onCreate只是继续在其线程上运行(你的应用主要用户线程)。

延迟某些操作的正确方法是在ImageView上调用postDelayed函数:

im1.postDelayed(new Runnable() {
    public void run() {
        //Code to change image
    }
}, 5000);