Android 搜索框展开动画

在Android应用开发中,搜索框是一个常见的功能组件,通常展开动画可以为用户提供更加友好的交互体验。本文将介绍如何实现一个简单的搜索框展开动画,帮助开发者更好地理解动画的实现原理。

动画效果

我们希望搜索框初始状态为收起状态,当点击搜索图标时,搜索框展开并显示输入框,点击搜索图标再次,搜索框收起。具体效果如下所示:

stateDiagram
    [*] --> 收起
    收起 --> 展开: 点击搜索图标
    展开 --> 收起: 点击搜索图标

实现步骤

1. 布局文件

首先,在布局文件中定义搜索框的UI组件,包括一个搜索图标和一个输入框,如下所示:

<RelativeLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/ivSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_search"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"/>

    <EditText
        android:id="@+id/etSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入关键词"
        android:layout_toEndOf="@id/ivSearch"
        android:visibility="gone"/>

</RelativeLayout>

2. Java代码

接下来,在Activity或Fragment中处理搜索框的展开和收起逻辑,代码如下:

public class MainActivity extends AppCompatActivity {

    private ImageView ivSearch;
    private EditText etSearch;
    private boolean isExpanded = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ivSearch = findViewById(R.id.ivSearch);
        etSearch = findViewById(R.id.etSearch);

        ivSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isExpanded) {
                    collapseSearch();
                } else {
                    expandSearch();
                }
                isExpanded = !isExpanded;
            }
        });
    }

    private void expandSearch() {
        etSearch.setVisibility(View.VISIBLE);
        Animation animation = new TranslateAnimation(0, 0, -etSearch.getHeight(), 0);
        animation.setDuration(300);
        etSearch.startAnimation(animation);
    }

    private void collapseSearch() {
        Animation animation = new TranslateAnimation(0, 0, 0, -etSearch.getHeight());
        animation.setDuration(300);
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                etSearch.setVisibility(View.GONE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });
        etSearch.startAnimation(animation);
    }
}

总结

通过上述代码示例,我们实现了一个简单的搜索框展开动画效果。开发者可以根据实际需求对动画进行定制化调整,例如添加渐变效果、旋转动画等。希术本文能够帮助开发者更好地理解Android动画的实现原理,提升应用交互体验。