Android:如何将动画图像放在我们可以显示和隐藏的EditText中

时间:2010-09-14 02:56:40

标签: android android-widget

我正在尝试在右侧的EditText视图中添加一个动画微调器 。并以编程方式显示/隐藏它。

我通过引入线性插值旋转创建了动画微调器:

RES /动画/ 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 /布局/ 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里面 对。所以它不会出现在里面 外面。(我以为我可以放置 一个android:drawableRight,但是那个 没用。
  2. 我该怎么办? 隐藏/显示ImageView(微调),我 尝试设置视图 无形,通过做 searchSpinner.setVisibility(View.INVISIBLE); 但那没用。
  3. 谢谢,如果你有更好的想法如何处理这个问题,我正在倾听:)

4 个答案:

答案 0 :(得分:3)

我可能会使用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>

注意ImageView上的“layout_gravity”......

答案 1 :(得分:2)

通过您已经完成的工作,我认为最简单的答案是将LinearLayout更改为RelativeLayout,以便您可以在ImageView上设置alignParentRight并根据需要添加paddingRight。

另一个选择是创建自定义视图组件:http://developer.android.com/guide/topics/ui/custom-components.html

答案 2 :(得分:0)

这也有效

<EditText
    ...     
    android:drawableLeft="@drawable/my_icon" />

答案 3 :(得分:0)

如果您正在使用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();
                }
            }
        });