简体   繁体   中英

ImageView Not showing image after change visibility from gone to visible

I have this ImageView:

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:id="@+id/formSuggestionScroll">

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".SuggestQuestionActivity" 
    android:orientation="vertical"
    android:scrollbars="vertical"
    android:background="@android:color/black">

  <Button
    android:id="@+id/btnOpenGallery"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/suggest_btnOpenGallery"
    android:onClick="btnOpenGallery_click"
    android:textColor="@android:color/white"
    android:paddingTop="@dimen/buttons_paddingTop"/>

  <ImageView
      android:id="@+id/selectedPicContainer"
      android:layout_width="@dimen/imagen_dimen_width"
      android:layout_height="@dimen/imagen_dimen_height"
      android:layout_marginTop="@dimen/image_padding"
      android:adjustViewBounds="true" 
      android:layout_gravity="center_horizontal"
      android:visibility="gone"/>

  <Button
    android:id="@+id/btnSend"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/suggest_send"
    android:onClick="btnSend_click"
    android:textColor="@android:color/white"
    android:paddingTop="@dimen/buttons_paddingTop"/>

</LinearLayout>

And I want to make it visible after user selects an image form gallery:

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch(requestCode){

        case SELECT_PHOTO:
            if(resultCode == RESULT_OK){

                ImageView view = (ImageView) findViewById(R.id.selectedPicContainer);


                imageUri = data.getData();
                Bitmap galleryPic = scaleBitmap(getPathFromUri(imageUri), view.getHeight());

                if(galleryPic != null){
                    view.setImageBitmap(galleryPic);
                    view.setVisibility(View.VISIBLE);
                }else{
                    Toast toast = Toast.makeText(this, "selection failed", Toast.LENGTH_LONG);
                    toast.show();
                }
            }
            break;
    }

}

Code for scaleBitmap function:

private Bitmap scaleBitmap(String imagePath, int maxDimension) {

    Bitmap scaledBitmap;

    BitmapFactory.Options op = new BitmapFactory.Options();

    op.inJustDecodeBounds = true; 
    scaledBitmap = BitmapFactory.decodeFile(imagePath,op);

    if(maxDimension < op.outHeight || maxDimension < op.outWidth){
        op.inSampleSize = Math.round(Math.max((float) op.outHeight / (float) maxDimension,
                                              (float)op.outWidth / (float) maxDimension));
    }

    op.inJustDecodeBounds = false;
    scaledBitmap = BitmapFactory.decodeFile(imagePath,op);

    return scaledBitmap;
}

The problem is that the ImageView displays a color square, not the picture. The color depends on which image is chosen. So maybe something is wrong with the rendering but my knowledge about this is very small.

The problem dissapears if I set visibility to invisible instead of gone.

Hope someone can help. Thanks

Could it be that view.getHeight() is 0 because of it being GONE ? So scaleBitmap(getPathFromUri(imageUri), view.getHeight()) might be scaling it to 1 pixel?

你也可以显示默认图像,而不是让视图不可见

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM