ImageView Bild zu groß

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 36

02.05.2016, 20:24:55 via Website

Hi :)

habe eine ImageView mit der ich ein Foto (über intent Picker und so) anzeigen möchte.

Allerdings ist das Foto immer soooo groß, dass es den ganzen Bildschirm einnimmt.

Wie kann ich das Foto kleiner machen, dass es nicht das ganze Layout kaputt macht.

Mit Scale klappt das irgendwie nicht

  <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/ImageViewNew"
        android:contentDescription="@string/cdphoto"
        android:src="@drawable/camca"
        android:layout_margin="5dp"
        android:onClick="onClick"
        android:layout_gravity="center"
        android:scaleType="fitCenter"

         />

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

02.05.2016, 20:28:42 via Website

Du kannst die Layout width begrenzen, dann sollte es skalieren.
Ab besten dann auch die hight einschränken im AspectRatio

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 36

03.05.2016, 16:58:49 via Website

Okee hab jetzt folgendes gemacht

Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int ImgW = 80*size.x/100;
    int ImgH = 30*size.y/100;
    nImageView = (ImageView) findViewById(R.id.ImageViewNew);
    LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(ImgW,ImgH);
    nImageView.setLayoutParams(parms);

Also 80% Breite und 30% Höhe - aber die Bilder der Camera, worum es mir eigentlich geht,
scheint er trotzdem irgendwie nicht zu mögen (zu groß?)

— geändert am 03.05.2016, 16:59:31

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

03.05.2016, 17:50:33 via Website

Hmm, dann skalieren nicht die ImageView sondern direkt das Bild.
Wenn du es erst das Bitmap lädst,dann die Größe veränderst und es dann anzeigst sollte das auch gehen,.

— geändert am 03.05.2016, 17:51:18

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 36

07.05.2016, 21:14:13 via Website

public void Pict()

{
Intent intent = new Intent();

intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK)
    {
        try{
        Uri imageUri = data.getData();
            PicUri = imageUri.toString();
        Bitmap bitmap = getThumbnail(this, imageUri, 300);
            ImageView imageView = (ImageView) findViewById(R.id.ImageViewNew);
            imageView.setImageBitmap(bitmap);

        } catch (IOException e) {
            e.printStackTrace();
    }
}

}

public Bitmap getThumbnail(Context context, Uri uri, int THUMBNAIL_SIZE) throws FileNotFoundException, IOException{
    InputStream input = this.getContentResolver().openInputStream(uri);

    BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options();
    onlyBoundsOptions.inJustDecodeBounds = true;
    onlyBoundsOptions.inDither=true;//optional
    onlyBoundsOptions.inPreferredConfig=Bitmap.Config.ARGB_8888;//optional
    BitmapFactory.decodeStream(input, null, onlyBoundsOptions);
    input.close();
    if ((onlyBoundsOptions.outWidth == -1) || (onlyBoundsOptions.outHeight == -1))
        return null;

    int originalSize = (onlyBoundsOptions.outHeight > onlyBoundsOptions.outWidth) ? onlyBoundsOptions.outHeight : onlyBoundsOptions.outWidth;

    double ratio = (originalSize > THUMBNAIL_SIZE) ? (originalSize / THUMBNAIL_SIZE) : 1.0;

    BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
    bitmapOptions.inSampleSize = getPowerOfTwoForSampleRatio(ratio);
    bitmapOptions.inDither=true;//optional
    bitmapOptions.inPreferredConfig=Bitmap.Config.ARGB_8888;//optional
    input = this.getContentResolver().openInputStream(uri);
    Bitmap bitmap = BitmapFactory.decodeStream(input, null, bitmapOptions);
    input.close();

    return bitmap;
}

private static int getPowerOfTwoForSampleRatio(double ratio){
    int k = Integer.highestOneBit((int)Math.floor(ratio));
    if(k==0) return 1;
    else return k;

}

ok hab noch nicht alles im Code verstanden (thinking) (da muss ich noch nacharbeiten) musste auch noch was ändern ... aber es funktioniert (lightbulb)

— geändert am 07.05.2016, 21:15:33

Antworten

Empfohlene Artikel