先看一下图片吧
点击上面的选择三角旋转向下选择,底部弹出选择列表,可点击取消和界面消失,三角旋转向上返回
这个选择框是由一个textview和imageview组成的,下面来看看实现方式吧
首先是上面选择的布局(在没旋转的时候我们给的旋转角度是android:rotation="0")
然后创建底部弹出popwindow<LinearLayout android:id="@+id/linear1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_weight="1" android:background="@drawable/yuanjiao" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/zonghe" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="综合评价" android:textColor="#6D6D6D" android:textSize="14sp" /> <ImageView android:id="@+id/jiantou1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:rotation="0" android:src="@mipmap/jiantou" /> </LinearLayout>
TanChu.java
import android.app.Activity; import android.graphics.drawable.ColorDrawable; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import com.yinyu.yangzhuo.yinyu.R; import java.util.ArrayList; import java.util.List; /** * Created by Android-01 on 2017/3/27. * 回掉 * callback */ public class TanChu implements View.OnClickListener, View.OnTouchListener, PopupWindow.OnDismissListener { private MyAdapter myAdapter; public static String shuju = null; public PopupWindow popupWindow; private Button btnCancel; private TextView btn1, btn2; private View mMenuView; private Activity mContext; private View.OnClickListener clickListener; private List<String> names = new ArrayList<String>(); public tanchuCallBack callBack; private ListView listview; public void setCallBack(tanchuCallBack callBack) { this.callBack = callBack; } public TanChu(Activity context, View.OnClickListener clickListener, final List<String> names) { LayoutInflater inflater = LayoutInflater.from(context); this.names = names; this.clickListener = clickListener; mContext = context; mMenuView = inflater.inflate(R.layout.tanchu, null); listview = (ListView) mMenuView.findViewById(R.id.listview); myAdapter = new MyAdapter(this.names); listview.setAdapter(myAdapter); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(mContext, "点击=》" + TanChu.this.names.get(i), Toast.LENGTH_SHORT).show(); shuju = TanChu.this.names.get(i); callBack.getData(i, names); Log.i("lg", "lggg=>" + shuju); popupWindow.dismiss(); } }); btnCancel = (Button) mMenuView.findViewById(R.id.btn_cancel); btnCancel.setOnClickListener(this); popupWindow = new PopupWindow(mMenuView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); popupWindow.setAnimationStyle(R.style.popwin_anim_style); ColorDrawable dw = new ColorDrawable(context.getResources().getColor(R.color.ccc)); popupWindow.setBackgroundDrawable(dw); popupWindow.setOnDismissListener(this); mMenuView.setOnTouchListener(this); } public void show() { View rootView = ((ViewGroup) mContext.findViewById(android.R.id.content)).getChildAt(0); popupWindow.showAtLocation(rootView, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); } @Override public void onClick(View view) { popupWindow.dismiss(); switch (view.getId()) { case R.id.btn_cancel: break; default: clickListener.onClick(view); break; } } @Override public boolean onTouch(View arg0, MotionEvent event) { int height = mMenuView.findViewById(R.id.pop_layout).getTop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) { popupWindow.dismiss(); } } return true; } @Override public void onDismiss() { if (callBack != null) { callBack.onDismiss(); } } private class MyAdapter extends BaseAdapter implements ListAdapter { private LayoutInflater mInflater; //得到一个LayoutInfalter对象用来导入布局 private List<String> lists = new ArrayList<String>(); public MyAdapter(List<String> names) { this.mInflater = LayoutInflater.from(mContext); this.lists = names; } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int i) { return lists.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View convertView, ViewGroup viewGroup) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.listitem, null); holder = new ViewHolder(); /*得到各个控件的对象*/ holder.title = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); //绑定ViewHolder对象 } else { holder = (ViewHolder) convertView.getTag(); //取出ViewHolder对象 } holder.title.setText(lists.get(i)); return convertView; } } /*存放控件 的ViewHolder*/ public final class ViewHolder { public TextView title; } public interface tanchuCallBack { void getData(int tag, List<String> result); void getCallButton(int postion); void onDismiss(); } }
tanchu.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@android:color/transparent" android:orientation="vertical" > <LinearLayout android:id="@+id/pop_layout" android:layout_width="fill_parent" android:layout_height="300dp" android:gravity="center_horizontal" android:background="@drawable/selector_btn" android:orientation="vertical" android:layout_alignParentBottom="true" android:layout_alignParentStart="true"> <TextView android:textColor="#3dddb0" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="头标题" android:textSize="16sp" android:background="@android:color/transparent" android:textStyle="bold" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </ListView> <Button android:id="@+id/btn_cancel" android:layout_width="match_parent" android:layout_height="40dp" android:text="取消" android:layout_marginBottom="10dp" android:layout_marginTop="11dp" android:gravity="center" android:layout_gravity="center_horizontal" android:background="@android:color/transparent" android:textColor="#3dddb0" android:textStyle="bold" /> </LinearLayout> </RelativeLayout>
sytyle 文件 popwin_anim_style.xml
</style> <style name="popwin_anim_style"> <item name="android:windowEnterAnimation">@anim/ppwindow_show_anim</item> <item name="android:windowExitAnimation">@anim/ppwindow_hide_anim</item> </style>
在res中建文件夹anim放入 ppwindow_show_anim.xml
差不多了,有用到的缺那个和我说哈,自己做个记录,嘿嘿<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="300" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="1920" android:toYDelta="0" /> <alpha android:duration="300" android:fromAlpha="0" android:toAlpha="1" /> </set>
ppwindow_hide_anim.xml
listitem.xml<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="300" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="1920" /> <alpha android:duration="300" android:fromAlpha="1" android:toAlpha="0" /> </set>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title" android:layout_gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="40dp" android:textColor="#3dddb0" android:gravity="center" android:text="菜单" android:background="@android:color/transparent" android:textStyle="bold" /> </LinearLayout>
在使用的activity或者fragment中private List<String> names = new ArrayList<>();private TanChu tanchu;private TextView zonghe;private ImageView jiantou;names.add("高三5班"); names.add("高三1班"); names.add("高二5班"); names.add("初中1班"); names.add("2011班"); names.add("清华速成班"); names.add("帅哥速成班"); names.add("程序员速成"); names.add("扯蛋0班");jiantou = (ImageView) getView().findViewById(R.id.jiantou1); zonghe = (TextView) getView().findViewById(R.id.zonghe);
zonghe.setOnClickLinstener(new OnClickLinstener);
zonghe.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tanchu = new TanChu(getActivity(), clickListener, names); jiantou.setRotationX(180); jiantou.setRotationY(180); tanchu.setCallBack(new TanChu.tanchuCallBack() { @Override public void getData(int tag, List<String> result) { zonghe.setText(result.get(tag)); if (result.get(tag) != null) { zonghe.setTextColor(R.color.titlepink); //刷新recicyeview更新数据 } jiantou.setRotationX(0); jiantou.setRotationY(0); } @Override public void getCallButton(int postion) { } @Override public void onDismiss() { jiantou.setRotationX(0); jiantou.setRotationY(0); } }); tanchu.show(); } });