SORU
21 Aralık 2012, Cuma


Kırpma veya bozulma olmadan Android İmageView ölçekli esnek yüksekliği ile genişliği için küçük resim

Sık sık, asla cevap istedi (en az tekrarlanabilir bir yöntem değil).

Bir resim ile bir resim görünümü vardaha küçükgörünümü daha. Ekran genişliği görüntü ölçek istiyorum ve İmageView yüksekliği görüntünün orantılı olarak yüksekliği doğru yansıtacak şekilde ayarlayın.

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Görüntüdeki bu sonuçlar tarafındaki boşlukları ile orijinal boyutu (ekran genişliği sonra küçük) merkezli. Hayır iyi.

Ekledim

android:adjustViewBounds="true" 

Aynı etki, hayır iyi. Ekledim

android:scaleType="centerInside"

Aynı etki, hayır iyi. fitCenter centerInside değiştirdim. Aynı etki, hayır iyi. centerCrop 12 *değiştirdim.

android:scaleType="centerCrop"

Şimdi, son olarak, görüntüölçeklendirilmişekran genişliği - amakırpılmışüst ve alt! fitXY 15 *değiştirdim.

android:scaleType="fitXY"

Şimdi GÖRÜNTÜ Ekran genişliğine ama ölçeklendirilmişdeğily ekseni üzerinde ölçekli bir sonucubozukresim.

android:adjustViewBounds="true" kaldırma etkisi yoktur. Hesap başka bir yerde önerilen android:layout_gravity, yine hiçbir etkisi olmaz.

Boşuna ... diğer kombinasyonları denedim. Herkes biliyor mu yani, lütfen:

Nasıl ekran genişliğini doldurmak için bir İmageView XML kurmak, daha küçük bir görüntü, tüm görüntüleme doldurmak için ölçekli, bozulma olmadan en boy oranına sahip görüntü görüntüleme veya kırpma mı?

EDİT: ben de keyfi bir sayısal yükseklik ayarı denedim. Bu sadece centerCrop ayarı bir etkisi yoktur. Görüntüyü dikey olarak görüntülemek yüksekliğine göre deforme olacaktır.

CEVAP
2 Temmuz 2013, Salı


Düzeni dosyası içeren bir java sınıf oluşturarak çözdüm:

public class DynamicImageView extends ImageView {

    public DynamicImageView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
        final Drawable d = this.getDrawable();

        if (d != null) {
            // ceil not round - avoid thin vertical gaps along the left/right edges
        final int width = MeasureSpec.getSize(widthMeasureSpec);
        final int height = (int) Math.ceil(width * (float) d.getIntrinsicHeight() / d.getIntrinsicWidth());
            this.setMeasuredDimension(width, height);
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}

Şimdi, sizin için bir sınıf düzeni-dosya: eklendi bu kullanın

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <my.package.name.DynamicImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/about_image" />
</RelativeLayout>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • RFS Dan

    RFS Dan

    22 Temmuz 2014