Анимация не отображается в пользовательском макете

#android #android-layout #listview #android-activity #view

#Android #android-layout #просмотр списка #android-активность #Вид

Вопрос:

Я создал пользовательский макет для перехода в listview. У меня есть анимация в пользовательском макете, но я не могу заставить ее отображаться. Анимация работает, если я удаляю ее из пользовательского listview, но тогда ее, очевидно, нет в listview!

Приведенные ниже фрагменты кода точно показывают, что я вызываю. Я полагаю, что ошибка связана с тем, как я использую LayoutInflator, но я не уверен, что происходит.

Активность:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  

        ArrayAdapter<Group> adapter = new ArrayAdapter<Group>(this, custom_listview_activetethers, R.id.label, currentUser.getGroupList());
        setListAdapter(adapter);

        setContentView(R.layout.activity_tether_list);

        //standard animated image in the layout, works fine but obviously not in the listview
        ImageView mImageViewEmptying = (ImageView) findViewById(R.id.tetherPulseAnimationTest);
        ((AnimationDrawable) mImageViewEmptying.getBackground()).start();

        //custom animated image, does not show
        LayoutInflater inflater = this.getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.custom_listview_activetethers, null);

        ImageView mImageViewFilling = (ImageView) dialogView.findViewById(R.id.tetherPulseAnimation);
        ((AnimationDrawable) mImageViewFilling.getBackground()).start();
  

Макет (содержащий рабочий пример анимации):

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/activity_tether_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="uk.tether.topcom.tether.TetherListActivity">

    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="10dp"/>

    <ImageView
        android:id="@ id/tetherPulseAnimationTest"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginTop="4px"
        android:background="@drawable/tetheredanimation"
        />

</RelativeLayout>
  

Пользовательский макет (единственное, что не отображается, это анимация):

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@ id/profilepic"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="4px"
        android:layout_marginRight="2px"
        android:layout_marginTop="4px"
        android:src="@drawable/tetherlogo" >
    </ImageView>

    <TextView
        android:id="@ id/label"
        android:layout_width="257dp"
        android:layout_height="60dp"
        android:text="@ id/label"
        android:layout_marginTop="4px"
        android:textSize="15dp"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
        android:gravity="center">
    </TextView>

    <ImageView
        android:id="@ id/tetherPulseAnimation"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginTop="4px"
        android:background="@drawable/tetheredanimation"
        />
</LinearLayout>
  

Я потратил значительное количество времени, пытаясь заставить это работать, но по-прежнему безуспешно! Я думал, что раздувание и извлечение представления, а затем вызов анимации из этого представления будут работать, но это не так.

Кто-нибудь может увидеть, где я ошибся, потому что я чувствую себя совершенно потерянным!

Редактировать: Пример того, как это выглядит, показывающий рабочие элементы пользовательского макета и где анимации должны быть выделены красным. Также отображается нестандартная анимация, работающая в верхнем левом углу, чтобы исключить проблему с изображениями и т.д. Пример

Ответ №1:

Поскольку вы используете жестко закодированные значения layout_width, я бы рискнул сказать, что ваш ImageView, содержащий анимацию, удаляется с экрана. (Для проверки можно включить границы макета в настройках разработчика на устройстве, но это не главное).

Вы действительно не должны жестко кодировать такие значения и размещать представления относительно друг друга или с весами. В качестве простого исправления попробуйте установить layout_width для TextView равным 0dp, а weight равным 1. Это означает, что она займет оставшееся доступное пространство в макете.

Комментарии:

1. Да, я знаю, но я не слишком силен во внешней части, поэтому я просто хотел, чтобы какой-нибудь тестовый код сработал. Но ваше предложение сработало, и я вижу синие точки, просто они все еще (без анимации).

2. К сожалению, все еще существует проблема с расширением и запуском анимации.