6 grafik 120 mb? Zmniejsz rozdzielczość i jakość zdjęcia, nie potrzebujesz oryginału ;)
Wszystko zależy jaki efekt chcesz uzyskać. Grafiki nie musiałeś obrabiać w Photoshopie jeżeli chciałeś dodać tylko teksty - mogłeś nanieść na ImageView/ImageButton tekst korzystając z TextView w układzie RelativeLayout.
Aby po kliknięciu w dane zdjęcie móc przejść do innej aktywności musisz użyć ImageButton i zdefiniować atrybut "onClick" (z metodą) w pliku xml oraz napisać do niej metodę zmiany aktywności z parametrem "View zmienna".
Wydaje się proste, ale jest mały haczyk. Wszystko co robisz będzie się odbywało na pierwszym tle, więc póki zdjęcia nie zostaną wczytane aplikacja się nie włączy/ zawiesi się/ wywali błąd OutOfMemoryException.
Musisz przerzucić wczytywanie zdjęć na "drugi" rdzeń, tzn póki zdjęcie nie zostanie wczytane to nie zostanie załadowane, co nie spowoduje zawieszenia interfejsu, czego oczywiście nie chcemy. Przy pierwszym ładowaniu zdjęcia aplikacja utworzy swoje cache, z którego później automatycznie będzie dane zdjęcie ładować, praktycznie od razu, bez opóźnień. Tyle by było z teorii, niby skomplikowane, ale na pomoc przychodząbiblioteki typu Glide z bardzo łatwym użyciem (jeszcze jest np Picasso, jednak Google zaleca korzystać z Glide)
Implementacja:
1. Dodaj skrypty w pliku Gradle, zsynchronizuj projekt:
dependencies {
implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}
2. Utwórz pustą klasę, która będzie rozszerzała "AppGlideModule". Wraz z importami powinno to wyglądać tak:
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class GlideMod extends AppGlideModule{
}
3. Utwórz nową metodę, może to wyglądać tak:
private void loadPhotos() {
//definiujemy nasz przycisk, dla którego będziemy ustawiać tło
ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton);
Glide.with(this)
.asDrawable()
.load(R.drawable.zdjecie) // ścieżka do zdjęcia
.listener(new RequestListener<Drawable>() {
/**
* te dwie metody poniżej mogą pozostać puste, jednak mimo wszystko należy je zaimplementować
*/
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageButton); // nasz utworzony ImageButton, którego tłem będzie nasze zdjęcie
}
na koniec wywołujemy metodę w onCreate lub implementujemy metodę onStart - zostańmy przy tym pierwszym dodając na końcu metody onCreate proste
loadPhotos();