2012-05-03 20 views
1

私はカスタムImageView(https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/example/touch/TouchImageView.java)を読み込むアクティビティを持っています。 onCreateの中で、setImageBitmapを使って巨大な画像(4Mb ...)を表示します。ImageViewで画像のロードが完了したときを知る方法は?

問題は、このアクティビティが表示に4秒かかりますが、AsyncTaskに配置できるブロック方法がないことです。つまり、すべてのアクティビティコードが実行されますが、アクティビティは画像が読み込まれたときにのみ発生し、終了するタイミングはわかりません。

アクティビティがロードされている間にProgressDialogを表示し、完了したら表示します。

どうすれば解決できますか?ここにいくつかのコードがあります。

あなたは私の問題を理解できると思って、説明するのはかなり難しいです。ありがとう!

carte.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/parentLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<loki.test.lokitest.affichage.TouchImageView 
    android:id="@+id/image" 
    android:src="@drawable/loading" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

<Button 
    android:id="@+id/bouton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:text="@string/textBouton"/> 


</RelativeLayout> 

CarteActivity.java(4秒を要するもの)

public class CarteActivity extends Activity implements OnClickListener{ 

private Group groupe; 
private String android_id; 
private ConnexionServeur serveur; 
private TouchImageView vue; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.d("Loki","onCreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.carte); 

    findViewById(R.id.bouton).setOnClickListener(this); 

    vue = ((TouchImageView)findViewById(R.id.image)); 
    vue.setImageBitmap(Singleton.getInstance().getImage()); 

    groupe = Singleton.getInstance().getGroupe(); 
    android_id = Singleton.getInstance().getAndroid_id(); 
    serveur = Singleton.getInstance().getServeur(); 

    if(groupe != null) 
      groupe.afficherGroupe(vue); 

    } 
} 

EDIT: 画像を用いてロードされている:

image = BitmapFactory.decodeResource(context.getResources(), R.drawable.myImage); 

しかし、私はこれがこのコードwhだとは思わないichは時間がかかりますが、setImageBitmapを使用するとすでに完了しています。私は何がそんなに時間がかかるか分かりませんが、私がアクセスできるメトロイドかどうかは疑問です。可視に設定し、視認性 -

+0

画像を読み込むためのコードを投稿できますか?関数getImage()のコード。 – Bobbake4

+0

私はコードを追加しました。 – Oyashiro

+0

@小早郎はあなたが見つけた解決策を投稿します – Javanator

答えて

2
  • メイクレイアウトのxmlトップコンテナ(トップRelativeLayout)は、二つの要素

    1プログレスバーを運びます。それを大きくして中心にします。

    2相対レイアウト - コンテンツ本体全体。最初に目に見えないようにしてください。これはプログレスバーの下にあり、画面全体を高さと幅の両方で埋め尽くします。

  • oncreate setContentViewでは、doInBackgroundで画像ビューを読み込むAysncTaskを開始します。postExecuteでは、コンテンツ本体を表示し、プログレスバーを非表示にします。 Postexecuteは、あなたの読み込みが完了し

後に呼ばれますが、このヘルプを願って、あなたはコード内でこのすべてを翻訳することができます。

+0

あなたの答えをありがとう。あなたのアイデアは素晴らしいですし、試しましたが、問題は解決しません。私は "コードをブロックしていない"ので、postExecuteは非常に迅速に実行され、アクティビティはまだ表示されないので、画面がフリーズします。チェックのために – Oyashiro

+0

、onCreateを実行するとsetContentViewのみが実行されます。他のすべてをdoInbackgroundに配置します。 onPostExecuteの変更が含まれます。そして最後には目に見えない進歩と目に見える内容が見えます。これがうまくいかない場合。神だけが正確に何が起こっているか知っている。鉱山の手が上がっています:) – Javanator

+0

私はこれを試しましたが、それでも私が望むように動作しません。私は別の電話で同じコードを試して、遅れはありません... – Oyashiro

関連する問題