2012-01-24 2 views
1

У меня есть Activity, содержащий вид Gallery. Я определил onItemSelectedListener на Gallery, так что всякий раз, когда выбран элемент, я применяю масштабную анимацию к текущему выбранному виду. Слушатель и масштабирование работают в значительной степени, как ожидалось, за исключением одной проблемы.Галерея изображений в галерее изображений в масштабе галереи

Когда я определил Галерею, я установил атрибут spacing, однако после масштабирования представления интервал не устанавливается должным образом. См. Изображение ниже в качестве примера проблемы.

Любые мысли о том, как я могу поддерживать правильный интервал?

enter image description here

Ниже приведены фрагменты кода:

main.xml

<Gallery 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/featured_gallery" 
    android:layout_width="1355px" 
    android:layout_height="490px" 
    android:layout_gravity="center" 
    android:spacing="5px" 
    android:layout_marginTop="70dp" 
    />  

feature_selected.xml

<?xml version="1.0" encoding="utf-8"?> 
<scale xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXScale="1.0" 
    android:toXScale="1.075" 
    android:fromYScale="1.0" 
    android:toYScale="1.075" 
    android:duration="100" 
    android:pivotX="50%" 
    android:pivotY="50%" 

    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:fillAfter="true"> 
</scale> 

onItemSelectListener

private class FeaturedSelectListener implements AdapterView.OnItemSelectedListener { 

    private Animation grow = null; 
    private View lastView = null; 

    public FeaturedSelectListener(Context c) { 
     grow = AnimationUtils.loadAnimation(c, R.anim.featured_selected); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     // Shrink the view that was zoomed 
     try { 
      if (null != lastView) 
       lastView.clearAnimation(); 
     } catch (Exception clear) { 
     } 

     // Zoom the new selected view 
     try { 
      view.startAnimation(grow); 
     } catch (Exception animate) { 
     } 

     // Set the last view so we can clear the animation 
     lastView = view; 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 

} 
+0

Вы пытались установить как левое, так и правое поле на выбранном изображении? возможно, это может вам помочь. – Andreas

+0

Я просто пробовал, и, к сожалению, это не сработало. Если я удалю pivotX из анимации, то в левой части масштабированного представления есть интервал, но не правильный. Элементы справа не перемещаются должным образом. – Steve

+0

Привет, Стив, мне нужно сделать такую ​​же анимацию в Галерее, если вы достигнете этого, можете ли вы отправить мне код, пожалуйста? – Hasmukh

ответ

1

Просмотр анимации в Android является одним из основных PITA. Он почти никогда не работает правильно, когда представление должно «перемещать другое представление». Иногда, используя параметры fill_after, представление не будет больше отвечать на событие касания. Бог знает, почему.

Я хотел бы дать вам два варианта: неоптимальные

  1. Вместо того, чтобы вид спереди больше, делают вид сбоку меньше. Межпространство будет расти, что может быть более привлекательным, чем то, что у вас есть.

  2. Удалить fill_after, а затем использовать AnimationListener и установить размер вида с помощью LayouParameters в анимацииEnd.

Удачи.

+0

Ха-ха ... спасибо, что рассказал мне то, что я уже знаю ... часть PITA. Я попробую эти предложения. Благодарю. – Steve

Смежные вопросы