2012-09-09 40 views
13

Tôi đang phát triển một ứng dụng trong đó người dùng sẽ chụp Ảnh từ máy ảnh và hiển thị nó trên màn hình xem trước có chế độ xem hình ảnh.Thanh tiến trình Android trên ImageView

**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); 
} 

Trong lớp Preview của tôi hình ảnh chụp được hiển thị trên 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); 

Có cách nào để hiển thị thanh tiến trình trên ImageView cho đến khi nó tải hình ảnh chụp từ thẻ SD. Thnx trước :)

Trả lời

30

Đặt ImageView và Progressbar của bạn trong RelativeLayout. Đối với ProgressBar của bạn, hãy sử dụng:

android:layout_centerInParent="true" 

Làm cách nào để căn giữa trong RelativeLayout, có nghĩa là trên ImageView. Bạn cũng có thể muốn ẩn ProgressBar khi hình ảnh đã được tải:

progressBar.setVisibility(View.Gone) 

khi hình ảnh được tải.

Mẫu mã:

<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

tuyệt vời, nhưng cách nhận thông báo khi hình ảnh được tải? –

3

Đây là giải pháp của tôi. Nó hơi khác một chút. Bạn có thể sử dụng nó để tạo chế độ xem giới thiệu với thanh hình ảnh và thanh tiến trình. Ở đây, thanh tiến trình ở 150dp ở cuối trung tâm. FrameLayout cũng có thể được sử dụng.

<?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> 
Các vấn đề liên quan