Próbuję dowiedzieć się, co robi android, gdy skaluje obraz, a konkretnie typ "centrum". Aby znaleźć odpowiedź, przeszukałem kod źródłowy ImageView i znajdowałem go pod numerem here.Metoda skalowania widoku obrazu "centercrop" jako kod
Więc co starałem jest ten kod:
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;
}
Ale to nie daje mi ten sam rezultat. Co ja robię źle ?
Herezje przykład:
Original Picture
Orginal ImageView Centercrop
Tried Kod
Edit: XML z 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>
więc mój ImageView jest fullscreened. Właśnie dlatego używam ScreenSize do jego przetworzenia.
kod jak ja jej stosowania
Bitmap bluredBoxBackground = buildBluredBoxBackground();
imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground));
Szczegółowy opis: Im po prostu staramy się uzyskać ten sam efekt, jak ImageView.setScaleType(ScaleType.CENTER_CROP)
. Tak więc mój kod powinien działać tak samo, jak oryginalna metoda setScaleType
. Dlaczego potrzebuję go jako kodu? Ponieważ w mojej sytuacji nie mogę uzyskać rysunku w moim ImageView, ale muszę przetworzyć go w jakiś sposób.
postu kod dla kompletnego rozciągliwej? Jak stosować go w ImageView? –
1) Otrzymujesz bitmapę z 'ImageView', w której losowanie mogło zostać zmienione z oryginału; 2) Używasz rozmiaru ekranu zamiast rozmiaru widoku docelowego; 3) Tworzysz skalowaną bitmapę zamiast używać tylko 'scaleType =" macierzy "'. Muszę zobaczyć więcej kodu, aby zrozumieć, co próbujesz osiągnąć, ale powinno to być proste rozwiązanie. Opublikuj kod swojej aktywności wraz z układem XML, który ma widok celu, wraz z bardziej szczegółowym opisem dokładnego problemu, który próbujesz rozwiązać. –
Edytowałem swój post z kodem i lepszym opisem mojego problemu. Mam nadzieję, że tym razem jest zrozumiałe. Dzięki za pomoc –