2011-04-15 31 views
1

我發現這個例子,我有一個小問題:我怎樣才能刪除點擊定時器或延遲顯示第一個圖像,並等待幾秒鐘,然後移動到下一張照片?android用計時器代替點擊

http://mobile.dzone.com/news/displaying-images-sd-card?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29 

謝謝。

package blog.android.sdcard; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.AdapterView.OnItemClickListener; 

/** 
* Displays images from an SD card. 
*/ 
public class SDCardImagesActivity extends Activity { 

    /** 
    * Cursor used to access the results from querying for images on the SD 
    * card. 
    */ 
    private Cursor cursor; 
    /* 
    * Column index for the Thumbnails Image IDs. 
    */ 
    private int columnIndex; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sdcard); 

     // Set up an array of the Thumbnail Image ID column we want 
     String[] projection = { MediaStore.Images.Thumbnails._ID }; 
     // Create the cursor pointing to the SDCard 
     cursor = managedQuery(
       MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, // Which 
                       // columns 
                       // to 
                       // return 
       null, // Return all rows 
       null, MediaStore.Images.Thumbnails.IMAGE_ID); 
     // Get the column index of the Thumbnails Image ID 
     columnIndex = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 

     GridView sdcardImages = (GridView) findViewById(R.id.sdcard); 
     sdcardImages.setAdapter(new ImageAdapter(this)); 

     // Set up a click listener 
     sdcardImages.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, 
        long id) { 
       // Get the data location of the image 
       String[] projection = { MediaStore.Images.Media.DATA }; 
       cursor = managedQuery(
         MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
         projection, // Which columns to return 
         null, // Return all rows 
         null, null); 
       columnIndex = cursor 
         .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       cursor.moveToPosition(position); 
       // Get image filename 
       String imagePath = cursor.getString(columnIndex); 
       // Use this path to do further processing, i.e. full screen 
       // display 
      } 
     }); 
    } 

    /** 
    * Adapter for our image files. 
    */ 
    private class ImageAdapter extends BaseAdapter { 

     private Context context; 

     public ImageAdapter(Context localContext) { 
      context = localContext; 
     } 

     public int getCount() { 
      return cursor.getCount(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView picturesView; 
      if (convertView == null) { 
       picturesView = new ImageView(context); 
       // Move cursor to current position 
       cursor.moveToPosition(position); 
       // Get the current value for the requested column 
       int imageID = cursor.getInt(columnIndex); 
       // Set the content of the image based on the provided URI 
       picturesView.setImageURI(Uri.withAppendedPath(
         MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" 
           + imageID)); 
       picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       picturesView.setPadding(8, 8, 8, 8); 
       picturesView 
         .setLayoutParams(new GridView.LayoutParams(100, 100)); 
      } else { 
       picturesView = (ImageView) convertView; 
      } 
      return picturesView; 
     } 
    } 
} 

回答

2

無需線程。只需使用與postDelayed消息處理程序...

public class HelloHandler extends Activity { 

protected Handler handler = new Handler(); 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // blah blah blah 

     handler.postDelayed(new UpdateTask(),500); 
    } 


    protected class UpdateTask implements Runnable { 
    public void run() { 
     // Do stuff. This is UI thread. 
     handler.postDelayed(this, 500); 
    } 
} 
} 
0

由於阻塞UI線程是從根本上對Android的框架,你很可能需要做的是建立一個線程和處理程序,以在一個循環在另一個線程睡眠,並使用處理器來傳遞消息發回到UI線程並更改圖像。我知道我在這裏有一個很好的線程/處理程序示例...

啊是的...看看如何通過線程和處理程序更新ProgressDialog的示例。它應該給你一些想法。

http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog

(見的伸縮部 「示例ProgressDialog與第二個線程。」