【Android初级】如何实现一个有动画效果的自定义下拉菜单

我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项。今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果。

要实现的功能及思路如下:

  1. 下拉菜单样式是自定义的、非原生效果:需要使用 setDropDownViewResource 方法来设置下拉视图的布局样式。该方法需要传入布局资源,该布局需要定义每个 Item 的属性,比如宽高和文字颜色等(为了使效果明显,我将每个 Item 的高度设置为 50 dp,文字设置为蓝色)
  2. 点击这个 Spinner 控件时,让其运行一段“从左到右、逐渐显示”的渐变动画:我通过 xml 的方式来定义这个动画,需要包含 translate(位移) 和 alpha(透明度) 两个TAG,并设置相应的属性值
  3. 下拉菜单的内容列表要展示在 Spinner 里面,需要通过适配器 Adapter 跟 Spinner 进行绑定:可以直接使用Android原生的 ArrayAdapter
  4. 选择任意一个 Item 后,将其内容展示在界面上,告知用户选择的内容:需要实现 Spinner 的 onItemSelected 监听回调

源码如下:

1、主Activity(注意代码中的注释,不然你会遇到一些坑!)

public class SpinnerDemo extends Activity {
    private static final String[] countries = {"北京", "上海", "广州", "深圳", "成都", "杭州"};

    private TextView mTextView;
    private Spinner mSpinner;
    private ArrayAdapter mAdapter;
    private Animation mAnimation;

    @Override
    protected void onCreate(Bundle onSavedInstance) {
        super.onCreate(onSavedInstance);
        setContentView(R.layout.spinner_demo);

        mTextView = findViewById(R.id.textView9);
        mSpinner = findViewById(R.id.spinner);

        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, countries);

        // 自定义的下拉视图布局样式
        mAdapter.setDropDownViewResource(R.layout.spinner_drop_down);

        // 设置数据的适配器
        mSpinner.setAdapter(mAdapter);

        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                mTextView.setText("你选择的是:" + countries[position]);

                // 一定要设置父视图可见,否则 在选择后,Spinner会消失
                parent.setVisibility(View.VISIBLE);
            }

            @Override
            public void onNothingSelected(AdapterView parent) {
            }
        });

        // 通过 xml 的形式来定义动画
        mAnimation = AnimationUtils.loadAnimation(this, R.anim.my_anim);
        mSpinner.setOnTouchListener(new Spinner.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // 点击 Spinner 后,运行动画
                v.startAnimation(mAnimation);
                return false;
            }
        });
    }
}

2、布局文件 spinner_demo.xml 如下:




    

    


3、自定义的下拉视图样式布局文件 spinner_drop_down.xml 如下:




4、自定义动画 xml 文件如下:



    

    

5、效果图如下:

你可能感兴趣的:(【Android初级】如何实现一个有动画效果的自定义下拉菜单)