Grafik gezielt abschneiden?

  • Antworten:3
Marco S.
  • Forum-Beiträge: 105

27.02.2010, 17:19:43 via Website

Lieber Entwickler,

ich würde gerne bei einem ImageView ein Bild in Originalauflösung darstellen, allerdings abgeschnitten.

Sei die Grafik 250x250 Pixel groß.

Allerdings will ich nur 100x100 als Auschnitt darstellen.

Um das Bild vollständig darzustellen:

<ImageView android:id="@+id/bildchen" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/bildchen" />

Nun hatte ich gehofft, wenn ich statt wrap_content eine absolute Größe eingebe, wurde die Grafik abgeschnitten werden:

<ImageView android:id="@+id/bildchen" android:layout_width="100px"
android:layout_height="100px" android:src="@drawable/bildchen" />

Leider wird das Bild proportional verkleinert. Ist ja schon mal nicht schlecht, aber führt nicht zum gewünschten Ergebnis.

Ich hab dann mit den Attributen android:scaleType und android:adjustViewBounds und android:cropToPadding rumgespielt aber kein Ergebnis erzielen können.

Auch der Versuch die Grafik statt im src in den background zu laden hat nicht den gewünschten Effekt erzielt.

Wer kann mir helfen?

Gruß
Marco

PS: ich möchte später mittels Tween Animation die Grafik in dem WIdget scrollen; beispielsweise wie der On/Off Button beim iPhone...

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

27.02.2010, 17:55:13 via Website

Die Klasse Bitmap in Android.graphics liefert Dir was Du benötigst ...

Guckst Du hier: http://developer.android.com/reference/android/graphics/Bitmap.html

Machst Du bspw. so ...
1Bitmap bitmap = BitmapFactory.decodeStream(getResources().openRawResource(
2 R.drawable.mainscreen));
3
4Bitmap cropedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 70, 100);

lg Voss

Marco S.

Antworten
Marco S.
  • Forum-Beiträge: 105

27.02.2010, 21:45:43 via Website

danke für deine antwort.

ich hab noch eine andere möglichkeit gefunden.

1<ImageView android:layout_width="wrap_content"
2 android:layout_height="wrap_content" android:src="@drawable/on_off"
3 android:layout_margin="10px" />
4
5 <ImageView android:layout_width="94dip" android:scaleType="matrix"
6 android:layout_height="wrap_content" android:src="@drawable/on_off"
7 android:layout_margin="10px" />
8
9 <ImageView android:id="@+id/imageview" android:layout_width="wrap_content"
10 android:layout_height="wrap_content" android:src="@drawable/on_off"
11 android:layout_margin="10px" />

im ersten wird das Bild komplett dargestellt.
im zweiten werden die linken 94 pixel vom bild dargestellt
im dritten ist das original zu sehen, mit einer id, und dann mach ich den java kram den du mir genannt hattest:

1Bitmap bitmap = BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.on_off));
2 Bitmap croppedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 94, bitmap.getHeight());
3 ImageButton ib = (ImageButton) findViewById(R.id.imagebutton);
4 ib.setImageBitmap(croppedBitmap);

viele grüße
marco

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

27.02.2010, 23:12:38 via Website

Na Prima,

das zweite ist in so fern eine nette Sache, wenn Du es nur am Begin benötigst , mit einer fixen Crop Area ... verändert diese sich jedoch zur Laufzeit wirds blöd ... das funktioniert dann nur mit der dritten Lösung.

Denk nur daran Dir kein Memory Leak einzuhandeln, wenn Du die dritte Lösung verwendest für eine Animation.. jeder Aufruf legt immerhin ein neues Objekt an :)

lg Voss

Antworten