Android Progress bar on ImageView

2019-03-09 15:41发布

I am developing an app in which user will take Picture from camera and display it on preview screen having image view.

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

In my Preview class the captured picture is displayed on 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 );

Is there is any way to show progress bar on the ImageView till it load the Captured image from SD card. Thnx in advance :)

2条回答
霸刀☆藐视天下
2楼-- · 2019-03-09 16:27

This is my solution. It is a little bit different. You can use it to create intro view with an image and progress bar. Here, progress bar is at 150dp to the bottom of center. FrameLayout can also be used.

<?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>
查看更多
你好瞎i
3楼-- · 2019-03-09 16:36

Put your ImageView and Progressbar in a RelativeLayout. For your ProgressBar, use:

android:layout_centerInParent="true"

Which will center it in the RelativeLayout, meaning over the ImageView. You might also want to hide the ProgressBar when the image has loaded:

progressBar.setVisibility(View.Gone)

when the image has been loaded.

Sample code:

 <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>
查看更多
登录 后发表回答