Android: как поместить анимированное изображение в EditText, который мы можем показать и скрыть - PullRequest
4 голосов
/ 14 сентября 2010

Я пытаюсь добавить анимированный вертушку внутри представления EditText справа.И программно показать / скрыть его.

Я создал анимированный счетчик, введя вращение линейной интерполяции:

res / anim / rotate_forever.xml

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:interpolator="@anim/linear_interpolator"
    android:duration="1200" />

res / layout / main.xml

 <LinearLayout android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:paddingRight="6dip"
      android:paddingLeft="6dip"
      android:orientation="horizontal" 
      android:background="@drawable/header_gradient" >
  <EditText android:id="@+id/search_text"
       android:layout_height="fill_parent"
       android:layout_width="fill_parent"
       android:layout_weight="1"
       android:singleLine="true"
       android:focusable="true" />
  <ImageView android:id="@+id/search_spinner"
      android:gravity="center_vertical|right"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/spinner_black"/>
 </LinearLayout>

То, как я запускаю анимацию, работает программно, и ясм. EditView слева и ImageView, вращающийся справа (потому что я понятия не имею)

ImageView searchSpinner = (ImageView) findViewById(R.id.search_spinner);
Animation spinnerAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate_forever);
searchSpinner.startAnimation(spinnerAnimation);

У меня такие вопросы:

  1. Как я могупоместите ImageView внутри EditText в крайнем правом углу.Так что он появится внутри, а не снаружи. (я думал, что могу просто разместить андроид: drawableRight, но это не сработало.
  2. Как я могу скрыть / показать ImageView (счетчик), Я попытался установить невидимость представления, выполнив searchSpinner.setVisibility(View.INVISIBLE);, но это не сработало.

Спасибо, если у вас есть идеи получше, как к этому подойти, я слушаю :)

Ответы [ 4 ]

3 голосов
/ 14 сентября 2010

Я бы, вероятно, использовал FrameLayout и сделал бы что-то вроде этого:

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Some text..."
        />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center_vertical"
        android:src="@drawable/...."
        />
</FrameLayout>

Обратите внимание на "layout_gravity" в ImageView ...

2 голосов
/ 14 сентября 2010

С работой, которую вы уже проделали, я думаю, что самым простым ответом было бы изменить ваш LinearLayout на RelativeLayout, чтобы вы могли установить alignParentRight в ImageView и добавить paddingRight при необходимости.

Другой вариант - создать пользовательский компонент вида: http://developer.android.com/guide/topics/ui/custom-components.html

0 голосов
/ 08 июня 2016

Если вы используете TextInputLayout и хотите анимировать рисованный вид в this

Сначала определите анимацию, установленную таким образом, в res / anim /

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:fillAfter="true"
     android:duration="200"
     android:interpolator="@android:interpolator/linear"
    >
    <scale
        android:fromXScale="0%"
        android:fromYScale="0%"
        android:toXScale="60%"
        android:toYScale="60%"
        android:pivotX="50%"
        android:pivotY="50%"
        />
    <translate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:startOffset="100"
        android:fromYDelta="0%"
        android:toYDelta="-80%"/>

</set>

и в вашем коде установите анимацию

final Animation animation = AnimationUtils.loadAnimation(this, R.anim.anims);
        final ImageView imgLeft = (ImageView) findViewById(R.id.imgLeft);

        final EditText et = (EditText) findViewById(R.id.cardnumEditTexst);
        et.setOnFocusChangeListener(new View.OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {
                if (hasFocus)
                {
                    if (et.getText().length() == 0)
                    {
                        imgLeft.startAnimation(animation);
                    }
                } else
                {
                    if (et.getText().length() == 0)
                        imgLeft.clearAnimation();
                }
            }
        });
0 голосов
/ 06 мая 2013

Это также работает

<EditText
    ...     
    android:drawableLeft="@drawable/my_icon" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...