Reputation: 368
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
Upvotes: 0
Views: 1559
Reputation: 391
u can also display a default image instead of making the view invisible
Upvotes: 0
Reputation: 23164
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?
Upvotes: 2