Bir görüntü, özellikle "centercrop" türü ölçeklendirir, android ne olduğunu öğrenmek için çalışıyorum. Bir cevap bulmak için ImageView kaynak kodunu aradım ve here'u buldum.Imageview ölçekleme yöntemi "centercrop" kodu olarak
Yani ne denedim bu kodu şöyledir:
public Bitmap buildBluredBoxBackground() {
int [] screenSize = Utilities.getScreenSize(mainActivityContext); //screensize[0] = x and [1] is y
Matrix mDrawMatrix = new Matrix();
Bitmap bitmap = ((BitmapDrawable)fullscreenViewHolder.imageViewArt.getDrawable()).getBitmap();
float scale;
float dx = 0, dy = 0;
if (bitmap.getWidth() * screenSize[1] > screenSize[0] * bitmap.getHeight()) {
scale = (float) screenSize[1]/(float) bitmap.getHeight();
dx = (screenSize[0] - bitmap.getWidth() * scale) * 0.5f;
} else {
scale = (float) screenSize[0]/(float) bitmap.getWidth();
dy = (screenSize[1] - bitmap.getHeight() * scale) * 0.5f;
}
mDrawMatrix.setScale(scale, scale);
mDrawMatrix.postTranslate(Math.round(dx), Math.round(dy));
result = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),mDrawMatrix,true);
... //Some processing work
return result;
}
Ama bu bana aynı sonucu vermiyor. Neyi yanlış yapıyorum ?
İşte bir örnek:
Orijinal resim
Orjinal ImageView Centercrop
çalıştı Kod
Düzenleme: ImageView
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewFullscreenArt"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewFullscreenArtBluredBox"/>
</FrameLayout>
Yani benim ImageView XML tam ekran haline edilmektedir. Bu yüzden, onu işlemek için screenSize kullanıyorum. Ben o
Bitmap bluredBoxBackground = buildBluredBoxBackground();
imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground));
Detaylı Açıklama uyguluyorum nasıl
Kodu: Im sadece ImageView.setScaleType(ScaleType.CENTER_CROP)
aynı etkiyi almaya çalışırken. Bu yüzden kodum orijinal setScaleType
yöntemiyle aynı şeyi yapmalıdır. Neden kod olarak ihtiyacım var? Çünkü benim durumumda ImageView'ımın drawingcache'ını alamıyorum ama &'u bir şekilde düzenlemem gerekiyor.
Mesaj kodu? ImageView'da nasıl uyguluyorsunuz? –
1) Çekilebilir orijinalin değiştirilmiş olabileceği 'ImageView' bitmap'i alıyorsunuz; 2) Hedef görünümün boyutu yerine ekranın boyutunu kullanıyorsunuz; 3) "scaleType =" matrix "' i kullanmaktan çok ölçeklenmiş bir bitmap oluşturuyorsunuz. Neyi başarmaya çalıştığınızı anlamak için daha fazla kod görmem gerekiyor, ancak bu basit bir düzeltme olmalı. Hedef görünümüne sahip XML düzeni ve çözümlemeye çalıştığınız kesin sorunun biraz daha ayrıntılı bir açıklamasıyla birlikte aktivitenizin kodunu da gönderin. –
Gönderiyi bir kod ve sorunumun daha iyi bir açıklamasıyla düzenledim. Umarım bu sefer anlamaya açıktır. Yardımınız için teşekkürler. –