咱們在購物APP裏面設置收貨地址時,都會有讓咱們選擇省份及城市的下拉菜單項。今天我將使用Android原生的 Spinner 控件來實現一個自定義的下拉菜單功能,並配上一個透明漸變更畫效果。android
要實現的功能及思路以下:ide
源碼以下:佈局
一、主Activity(注意代碼中的註釋,否則你會遇到一些坑!)動畫
public class SpinnerDemo extends Activity { private static final String[] countries = {"北京", "上海", "廣州", "深圳", "成都", "杭州"}; private TextView mTextView; private Spinner mSpinner; private ArrayAdapter<String> 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; } }); } }
二、佈局文件 spinner_demo.xml 以下:this
<?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" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/textView9"/> <Spinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/spinner" android:layout_gravity="center" android:layout_marginTop="15dp"/> </LinearLayout>
三、自定義的下拉視圖樣式佈局文件 spinner_drop_down.xml 以下:code
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="50dp" android:textColor="@color/colorBlue" android:singleLine="true" style="?android:attr/spinnerDropDownItemStyle"> </TextView>
四、自定義動畫 xml 文件以下:xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="50%p" android:duration="2000"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000"/> </set>
五、效果圖以下:blog