1. 概述
在开发中,有时候会遇到一个需求就是:有一个文字和向下箭头图标,点击文字显示下拉列表框并且箭头方向带有动画变为向上,如下图所示:

图片.png

图片.png
2. 代码如下:
1>:ArrowPopularActivity代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/8/21 18:33
* Version 1.0
* Params:
* Description: 下拉列表选项框及指示箭头动画
*/
public class ArrowPopularActivity extends BaseActivity {
private ListPopupWindow listPopupWindow = null;
private ImageView arrowImageView;
private TextView chooseText;
private LinearLayout linearLayout;
private SortAadapter adapter = null;
@Override
protected void initStatusLayout() {
}
@Override
public int getContentView() {
return R.layout.activity_arrow_popuwindow;
}
@Override
public void initView() {
linearLayout= (LinearLayout) findViewById(R.id.linearLayout);
arrowImageView = (ImageView)findViewById(R.id.arrow);
chooseText= (TextView) findViewById(R.id.chooseText);
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showListPopupWindow(linearLayout);
}
});
}
private class SortAadapter extends ArrayAdapter {
private String[] strs = {"最新", "推荐", "全部", "最热"};
private LayoutInflater inflater;
private int res;
public SortAadapter(Context context, int resource) {
super(context, resource);
inflater = LayoutInflater.from(context);
res = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = inflater.inflate(res, null);
TextView text = (TextView) convertView.findViewById(android.R.id.text1);
text.setText(getItem(position));
text.setTextColor(Color.WHITE);
text.setTextSize(10);
convertView.setBackgroundColor(Color.RED);
return convertView;
}
@Override
public String getItem(int position) {
return strs[position];
}
@Override
public int getCount() {
return strs.length;
}
}
public void showListPopupWindow(View view) {
if (listPopupWindow == null)
listPopupWindow = new ListPopupWindow(this);
if (adapter == null) {
adapter = new SortAadapter(this, android.R.layout.simple_list_item_1);
// ListView适配器
listPopupWindow.setAdapter(adapter);
// 选择item的监听事件
listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
Toast.makeText(getApplicationContext(), adapter.getItem(pos), Toast.LENGTH_SHORT).show();
chooseText.setText(adapter.getItem(pos));
listPopupWindow.dismiss();
}
});
listPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
//旋转0度是复位ImageView
arrowImageView.animate().setDuration(500).rotation(0).start();
}
});
}
// ListPopupWindow的锚,弹出框的位置是相对当前View的位置
listPopupWindow.setAnchorView(view);
listPopupWindow.setVerticalOffset(dip2px(this,5));
// 对话框的宽高
listPopupWindow.setWidth(view.getWidth());
listPopupWindow.setModal(true);
listPopupWindow.show();
arrowImageView.animate().setDuration(500).rotation(180).start();
}
public static int dip2px(Context context, float dipValue) {
float sDensity = context.getResources().getDisplayMetrics().density;
final float scale = sDensity;
return (int) (dipValue * scale + 0.5f);
}
@Override
public void initListener() {
}
@Override
public void initData() {
}
}
2>:activity_arrow_popuwindow代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:background="@drawable/round_corner_line_radius_3dp"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:layout_centerInParent="true"
>
<TextView
android:id="@+id/chooseText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="分类"
android:textColor="@android:color/holo_orange_dark"
android:textSize="12dp" />
<ImageView
android:id="@+id/arrow"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:src="@mipmap/icon" />
</LinearLayout>
</RelativeLayout>