SORU
13 HAZİRAN 2011, PAZARTESİ


İmageView Ölçekleme TOP_CROP

Büyük boy oranına sahip bir png görüntüleme ImageView bir aygıtı (dikey - uzun anlamı konuşma) daha var. En boy oranını koruyarak, üst genişliği eşleşen ve ekranın üst imageview iğneleme yaparken ortaya çıkarmak istemiştim.

Ölçek türü olarak CENTER_CROP kullanan var sorun (anlaşılabilir) üst kenarı f resim görünümü için üst kenar hizalama yerine ölçekli görüntünün merkezi olur.

FIT_START sorunu GÖRÜNTÜ Ekran yüksekliği sığdır genişliği ve dolgu değil.

Ben çözdüm bu sorunu kullanarak bir özel İmageView ve geçersiz kılma onDraw(Canvas) ve handeling bu el ile kullanarak tuval; sorun bu yaklaşım olduğunu 1) endişeleniyorum belki daha basit bir çözüm, 2) Ben bir VM mem özel durum arama super(AttributeSet) kurucu çalışırken bir dizi src ımg 330kb zaman öbek var 3 mb boş (bir yığın boyutu 6 mb) ve cant işe neden.

Herhangi bir fikir / öneri / çözüm hoş geldin :)

Teşekkürler

p.s. bir çözüm matrisi ölçek türü kullan ve kendim için olabileceğini düşündüm, ama aynı ya da benim şimdiki çözüm daha az gibi görünüyor!

CEVAP
13 HAZİRAN 2011, PAZARTESİ


Tamam, çalışan bir çözüm var. Darko dan sor beni İmageView sınıfı tekrar (teşekkürler) gösterdi ve dönüştürme Matrisi aslında ama ilk denemede başarı yoktu! şüpheli olarak () kullanarak başvurdu. Özel imageView benim sınıf super() sonra setScaleType(ScaleType.MATRIX) kurucu diyorum ve aşağıdaki yöntemi var.

    @Override
    protected boolean setFrame(int l, int t, int r, int b)
    {
        Matrix matrix = getImageMatrix(); 
        float scaleFactor = getWidth()/(float)getDrawable().getIntrinsicWidth();    
        matrix.setScale(scaleFactor, scaleFactor, 0, 0);
        setImageMatrix(matrix);
        return super.setFrame(l, t, r, b);
    }

Ben yerleştirilen ınt setFrame() yöntem olarak İmageView çağrısı configureBounds() içinde bu yöntem, tüm ölçek matrix şeyler gerçekleşir, çok mantıklı görünüyor bana (ki eğer sana katılmıyorum)

Aşağıda süper.() setFrame AOSP yöntemi

 @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        boolean changed = super.setFrame(l, t, r, b);
        mHaveFrame = true;
        configureBounds();
        return changed;
    }

Tam sınıf src here bul

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • oHeymarvin

    oHeymarvin

    11 Temmuz 2013
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006