Mam nadzieję, że jest to pomocne. Udaje mi się "symulować" rozwiązanie zmniejszania/powiększania za pomocą widgetu Gallery
. Ponieważ usunęli getScale()
, sprawy nieco się komplikują. Myślę, że to nie jest najlepsze rozwiązanie, ale przynajmniej mogę z tym żyć.
Co znalazłem to, że Gallery
zarządza ogniskiem NIEZWYKLE NIEPRAWIDŁOWYM. Tak więc pierwszym podejściem było dodanie detektora zmiany ogniskowej na wyświetlanym ekranie, ale bez powodzenia. Focus to MESS tam ... w kategoriach, że wybrany obraz to nie jest aktualnie skupiony widok. Wysłałem wiadomość e-mail do listy mailingowej programistów Androida na temat błędu w dokumentacji interfejsu API (w odniesieniu do metody focusSearch()
i niektórych ustawień ostrości).
Oto moje rozwiązanie tego problemu:
zbudować zasób animacji „rosnąć” obraz:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1.0"
android:toXScale="1.10"
android:fromYScale="1.0"
android:toYScale="1.10"
android:duration="300"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fillAfter="false"/>
Jeśli nie dostać co to znaczy wtedy należy przystąpić do zapoznania this
To będzie nasz efekt "wzrostu", a będziesz musiał go zapisać w: res/anim/grow.xml
lub jakiejkolwiek nazwie (ale zawsze w re/anim reż).
Możesz śledzić przewodnik zasobów od here, aby utworzyć widok Gallery
. Model ImageAdapter
buduje obiekt ImageView
za każdym razem, gdy obiekt Gallery
wywołuje getView()
. Jeden obejście można zaimplementować jest dodanie odpowiedniego wiersza do metody getView()
że identyfikuje View
z position
, w ten sposób:
...
i.setId(position);
...
Z tej linii dodany do metody obiektu ImageAdpater
getView()
można następnie jednoznacznie zidentyfikować, że zobaczyć w słuchacza, na przykład:
g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected (AdapterView<?> parent, View v, int position, long id) {
Animation grow = AnimationUtils.loadAnimation(YourActivity.this, R.anim.grow);
View sideView = parent.findViewById(position - 1);
if (sideView != null)
((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100));
sideView = parent.findViewById(position + 1);
if (sideView != null)
((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100));
v.startAnimation(grow);
v.setLayoutParams(new Gallery.LayoutParams(170, 150));
}
public void onNothingSelected (AdapterView<?> parent) {
System.out.println("NOTHING SELECTED");
}
});
UWAGA: można zauważyć, że wszystkie wartości z animacją i od parametrów układu zostały wybrane przeze mnie pod ręką. To dlatego, że nie zamierzam czyścić kodu dla ciebie.Jest to tylko obejście problemu z problemem ZŁY problem z tym widżetem lub systemem widoku Androida. Jeśli fokus był w porządku, wszystko, co musisz zrobić, to ustawić detektor zmiany ogniskowej, który sprawia, że gros/shrink, gdy uzyskał ostrość/nieostre.
Mam nadzieję, że to może pomóc Ci znaleźć drogę do swojego problemu,
Pozdrowienia,
New EDIT: To jest słuchacz mam ustawić, dodałem także linię i.clearAnimation()
w metodzie getView()
:
private class SelectListener implements AdapterView.OnItemSelectedListener {
private Animation grow;
private int last;
public SelectListener() {
grow = AnimationUtils.loadAnimation(RouteGallery.this, R.anim.grow);
last = 0;
}
public void onItemSelected (AdapterView<?> parent, View v, int position, long id) {
View sideView = parent.findViewById(last);
if (sideView != null && last != position)
sideView.clearAnimation();
v.startAnimation(grow);
last = position;
}
public void onNothingSelected (AdapterView<?> parent) {
}
}
robię to samo, ale nie działa ono na niektórych urządzeniach z Androidem, jeśli masz tę animację w widoku galerii, proszę wyślij mi kod. – Hasmukh