2012-09-09 65 views
13

我正在開發一個應用程序,其中用戶將從相機拍攝照片並將其顯示在具有圖像視圖的預覽屏幕上。ImageView上的Android進度條

**CameraCapture.java** 

class ButtonClickHandler implements View.OnClickListener 
{ 
    public void onClick(View view){ 
     myVib.vibrate(50); 
     startCameraActivity(); 
    } 
} 

protected void startCameraActivity() 
{ 
    File filenew = new File(_path); 
    Uri outputFileUri = Uri.fromFile(filenew); 

    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
    startActivityForResult(intent, 0); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    switch(resultCode) 
    { 
     case 0: 
      break; 

     case -1: 
      //pictaken++; 

      onPhotoTaken(); 

      break; 
    } 
} 

protected void onPhotoTaken() 
{ 
    //pictaken=true; 

    Intent i = new Intent(CameraCapture.this,Preview.class); 
    startActivity(i); 
} 

在我的預覽類所拍攝的畫面顯示在ImageView的

**Preview.java** 

File imgFile = new File("/sdcard/DCIM/Camera/test.jpg"); 
if(imgFile.exists()){ 

    // Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

    ImageView myImage = (ImageView) findViewById(R.id.image); 
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
    Matrix mat = new Matrix(); 
    String degree="90"; 
    mat.postRotate(Integer.parseInt(degree)); 
    Bitmap bMapRotate = Bitmap.createBitmap(myBitmap, 0, 0,myBitmap.getWidth(),myBitmap.getHeight(), mat, true); 
    myImage.setImageBitmap(bMapRotate); 
    //myImage.setImageBitmap(myBitmap); 

} 
_image = (ImageView) findViewById(R.id.image); 

有沒有什麼辦法可以顯示在ImageView的進度條,直到它加載從SD卡拍攝的圖像。 Thnx預先:)

回答

30

把你的ImageView和Progressbar放在一個RelativeLayout中。對於您的ProgressBar,請使用:

android:layout_centerInParent="true" 

這將使其位於RelativeLayout中,即在ImageView上。您可能還想在圖像加載時隱藏ProgressBar:

progressBar.setVisibility(View.Gone) 

當圖像已加載時。

示例代碼:

<RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true"/> 

     <ProgressBar 
      style="?android:attr/progressBarStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:visibility="visible"/> 

    </RelativeLayout> 
+0

不錯,但是如何在圖片加載時得到通知? –

3

這是我的解決方案。它有點不同。您可以使用它來創建帶有圖像和進度條的前景視圖。這裏,進度條在中心底部150dp處。也可以使用FrameLayout

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:contentDescription="@string/intro_description" 
     android:scaleType="fitXY" 
     android:src="@drawable/intro" /> 

    <ProgressBar 
     android:id="@+id/progress" 
     style="?android:attr/progressBarStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="150dp" 
     android:visibility="visible" /> 

</FrameLayout>