Próbuję nałożyć dwa obrazy w mojej aplikacji, ale wydaje się, że zawieszają się na mojej canvas.setBitmap()
linii. Co ja robię źle?
private void test() {
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.t);
Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.tt);
Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig());
Canvas canvas = new Canvas();
canvas.setBitmap(bmOverlay);
canvas.drawBitmap(mBitmap, new Matrix(), null);
canvas.drawBitmap(mBitmap2, new Matrix(), null);
testimage.setImageBitmap(bmOverlay);
}
Odpowiedzi:
Możesz pominąć złożoną manipulację Canvas i zrobić to całkowicie za pomocą Drawables, używając
LayerDrawable
. Masz jedną z dwóch możliwości: możesz zdefiniować go w XML, a następnie po prostu ustawić obraz, lub możesz skonfigurowaćLayerDrawable
dynamicznie w kodzie.Rozwiązanie nr 1 (przez XML):
Utwórz nowy plik XML do rysowania, nazwijmy go
layer.xml
:Teraz ustaw obraz za pomocą tego Drawable:
Rozwiązanie nr 2 (dynamiczne):
(Nie testowałem tego kodu, więc może wystąpić błąd, ale ten ogólny zarys powinien działać.)
źródło
ok, żeby wiedzieć, że istnieje program o nazwie DroidDraw. Może pomóc w rysowaniu obiektów i wypróbowywaniu ich jeden na drugim. Wypróbowałem twoje rozwiązanie, ale miałem animację pod mniejszym obrazem, więc to nie zadziałało. Ale potem spróbowałem umieścić jeden obraz we względnym układzie, który miał być najpierw pod, a następnie narysowałem drugi obraz, który miał być nałożony i wszystko działało świetnie. A więc RelativeLayout, DroidDraw i jesteś gotowy do pracy :) Proste, nie ma żadnego rodzaju jiggery pockery :) a tutaj jest trochę kodu dla ciebie:
Logo będzie znajdować się nad obrazem tła Shazam.
źródło
Możesz użyć poniższego kodu, aby rozwiązać problem lub pobrać demo tutaj
Utwórz dwie funkcje do obsługi każdej z nich.
Najpierw rysowane jest płótno, a obrazy są rysowane jeden na drugim od punktu (0,0)
Po kliknięciu przycisku
Funkcja tworzenia nakładki.
Czytaj więcej
źródło
To trochę późna odpowiedź, ale obejmuje łączenie obrazów z adresów URL za pomocą Picassa
MergeImageView
xml
Przykład
źródło
to jest moje rozwiązanie:
stosowanie :
lub
a wyniki:
Tryb nakładki:
Tryb ekranowy:
źródło