2012-05-03 117 views
1

我有一個加載自定義ImageView的活動(https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/example/touch/TouchImageView.java)。在onCreate中,我使用setImageBitmap來顯示一個巨大的圖像(4Mb ...)。如何知道ImageView何時完成加載圖像?

問題是此活動需要4秒才能顯示,但沒有可以放置在AsyncTask中的阻止方法。我的意思是我所有的活動代碼都被執行,但活動僅在圖像加載時纔會出現,並且我不知道何時完成。

我想要做的是在Activity加載它時顯示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); 

但我不認爲這是這個代碼我需要時間,它已經完成,當我使用setImageBitmap。我無法弄清楚需要花費那麼多時間,但我想知道是否可以訪問。

+0

你可以發佈用於加載圖像的代碼嗎?函數getImage()中的代碼。 – Bobbake4

+0

我加了代碼。 – Oyashiro

+0

@Oyashiro確實發佈了您找到的解決方案 – Javanator

回答

2
  • 進行佈局XML頂集裝箱(頂部的RelativeLayout)攜帶兩個元素

    1進度條 - 能見度設置爲可見。讓它變大並放在中心

    2相對佈局 - 整個內容主體。首先讓它看不見。它將在進度欄下,並且將在高度和寬度方向上填充整個屏幕。

  • 在oncreate setContentView中,然後啓動一個AysncTask,它在doInBackground.In中加載imageview。其postExecute使內容主體可見並且進度條不可見。只有當你的裝載完成

希望這有助於您可以把這個所有的代碼之後 Postexecute將被調用。

+0

感謝您的回答。你的想法很好,我嘗試過,但它不能解決問題。我沒有「阻止代碼」,所以postExecute執行得非常快,並且由於活動仍未顯示,屏幕凍結。用於檢查的 – Oyashiro

+0

,使onCreate僅執行setContentView。把所有其他東西放在doInbackground中。和ui更改onPostExecute。並在最後取得進展隱形和內容可見。如果這不起作用。只有上帝知道到底發生了什麼。我的手是:) – Javanator

+0

好吧,所以我試過這個,但它仍然不工作,因爲我想。我在另一部手機上嘗試了相同的代碼,並且沒有任何延遲。 – Oyashiro

相關問題