2011-11-09 6 views
-1

sdcardの特定のフォルダから一連の画像をスライドショー形式で表示しようとしています。 filelist []には、そのディレクトリにあるすべてのファイルの名前が含まれています。thread.sleepに基づいてループを実行できません

ここで画像を除外しています。次に、thread.sleep(1000)は何の効果もないようです。 1000msの時間が経過すると、ディレクトリ内の最後のイメージのみが表示されます。どこが間違っていますか?私はこれを達成することができる他の方法ですか?

多分私は完全に間違った。私は初心者ですので、PLZヘルプ。

public class List_imgActivity extends Activity { 
/** Called when the activity is first created. */ 

Bitmap[] bitmapArray = new Bitmap[1000]; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button pf=(Button) findViewById(R.id.pick_button); 

    pf.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent("org.openintents.action.PICK_DIRECTORY"); 

      intent.setData(Uri.parse("file:///sdcard")); 
      intent.putExtra("org.openintents.extra.TITLE", "Please select a folder"); 
      intent.putExtra("org.openintents.extra.BUTTON_TEXT", "Use this folder"); 
      startActivityForResult(intent, 1); 

     } 

     }); 

    } 
protected void onActivityResult(int requestCode, int recievecode, Intent intent) 
{ 

    if (requestCode == 1) 

    { 
     Uri uri = intent.getData(); 

     try { 
     File f=new File(new URI(uri.toString())); 
     final String nx=f.toString(); 

     if(f.isDirectory()) { 

      File filelist[] = f.listFiles(); 




     for(int i=0;i<filelist.length;i++) 
     { 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 

     e.printStackTrace(); 
    } 
     String filename = filelist[i].getName(); 
     int pos = filename.lastIndexOf("."); 
     String ext = filename.substring(pos); 


     if(ext.equals(".jpg")) 
     { 
      TextView tv1= (TextView) findViewById(R.id.textView1); 
      tv1.setText(filelist[i].toString()); 


      ImageView iv1=(ImageView) findViewById(R.id.imageView1); 





     bitmapArray[i] = BitmapFactory.decodeFile(filelist[i].toString()); 

     iv1.setImageBitmap(bitmapArray[i]); 


     } 

     } 


     } 



    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 





    } 

    } 

} 
+0

全アクティビティコードを投稿してください。また、スレッドを使用している場合は、UIスレッドで行われたイメージビューの変更がワーカースレッドでないことを確認してください。 – user370305

+0

filelistに1つ以上のイメージがありますか?ループの前にリストをフィルタリングしている場合は、最後の画像以外のすべてを何らかの形でフィルタリングした可能性はありますか? – brianestey

+0

こんにちは、 あなたはTimerTaskを試すことができます。 – Lucifer

答えて

0

Uは、UIスレッドのスリープを行います。このようにAndroidの動作でのThread.sleep()メソッド

1

を適用する前に、現在のオブジェクトを同期する必要があります。これにより、あなたのアプリケーションがユーザーにクラッシュするように見える電話機のUI全体がフリーズされ、しばらくするとシステムによって自動的にアプリケーションが強制終了されます。

特定の時間インターバルで物事を変更する仕組みがあります。これを行うには、このハンドラーを使用する必要があります。 Handlers

ハンドラは、postDelayedsendMessageDelayedというメソッドがあり、特定の時間の後に実行されるRunnableを作成するか、ハンドラの実装で処理する必要があるメッセージを送信できます。

ハンドラの初期化は、次のようになります

showNextImageHandler = new Handler() { 
    @Override 
    public void handleMessage(android.os.Message msg) { 
     showNextImage(); 
    } 
}; 

showNextImageHandler.sendMessageDelayed(showNextImageHandler.obtainMessage(), 1000); 

このコードは、それがメッセージを受信するたびに、関数showNextImageを呼び出して新しいハンドラを作成します。あなたのアクティビティのインスタンス変数にハンドラを格納して、後でさらにメッセージを送信します。ハンドラが作成された後、最初の空のメッセージは、1000ミリ秒のメッセージの送信を遅らせる方法で送信されます。 1秒後にshowNextImage関数が呼び出されます。この機能では、ビューを変更することができます。次の画像が存在する場合は、後でその機能の別の呼び出しをトリガーする別の遅延メッセージを送信することができます。

関連する問題