先上效果图:

直接上代码:

Ios spinner文件

package com.choe.iosspinner;import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;import java.util.List;/*** Created by choe on 2016/10/14.*/
public class IosSpinner extends TextView {private OnSpinnerItemClickListener mOnSpinnerItemClickListener;private int currentSelectedItemPosition=1;private IosSpinnerAdapter iosAdapter;private List<String> datas;private PopupWindow mPopWindow;public IosSpinner(Context context) {super(context);initView((Activity) context);}public IosSpinner(Context context, AttributeSet attrs) {super(context, attrs);if (context instanceof Activity){initView((Activity) context);}else {}}public IosSpinner(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView((Activity) context);}/*** 设置item 点击事件* @param listener*/public void setOnSpinnerItemClickListener(OnSpinnerItemClickListener listener){this.mOnSpinnerItemClickListener=listener;}/*** 获取当前选中的item* @return*/public int getSelectedItemPosition(){return currentSelectedItemPosition;}/*** 初始化下拉框* @param context*/private void initView(Activity context) {Drawable drawable= getResources().getDrawable(R.mipmap.down2);/// 这一步必须要做,否则不会显示.drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());setCompoundDrawables(null,null,drawable,null);}/*** 设置数据源* @param datas*/private void setData(List<String> datas){this.datas=datas;}/*** 显示window*/public void showWindow(){Drawable drawable= getResources().getDrawable(R.mipmap.color_up);/// 这一步必须要做,否则不会显示.drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());setCompoundDrawables(null,null,drawable,null);mPopWindow.showAsDropDown(this);}/*** 初始化列表window* @param context 上下文 必须是activity* @param list  数据源*/public void init( Activity context, List<String> list){setData(list);setGravity(Gravity.CENTER);setText(datas.get(0));View view = View.inflate(context, R.layout.popwindow, null);final ListView listView = (ListView) view.findViewById(R.id.pop_list);iosAdapter=new IosSpinnerAdapter(context);listView.setAdapter(iosAdapter);mPopWindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT,true);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {IosSpinner.this.setText(datas.get(position));currentSelectedItemPosition=position+1;iosAdapter.notifyDataSetChanged();mPopWindow.dismiss();if (mOnSpinnerItemClickListener!=null){mOnSpinnerItemClickListener.OnSpinnerItemClick(parent,view,position,id);}}});mPopWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_transparent));mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {Drawable drawable= getResources().getDrawable(R.mipmap.down2);/// 这一步必须要做,否则不会显示.drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());setCompoundDrawables(null,null,drawable,null);}});}/*** 关闭当前的window*/public void closeWindow(){if (mPopWindow!=null&&mPopWindow.isShowing()){mPopWindow.dismiss();}}class IosSpinnerAdapter extends BaseAdapter {private Context context;public IosSpinnerAdapter(Context context) {this.context = context;}@Overridepublic int getCount() {return datas.size();}@Overridepublic Object getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView==null){convertView = View.inflate(context, R.layout.item_pop, null);}View view=convertView.findViewById(R.id.divider);View up_divider=convertView.findViewById(R.id.up_divider);TextView textView= (TextView) convertView.findViewById(R.id.type);ImageView imageView= (ImageView) convertView.findViewById(R.id.isSelected);if (position==0){up_divider.setVisibility(View.VISIBLE);}if (position==datas.size()-1){view.setVisibility(View.GONE);}if (position==currentSelectedItemPosition-1){imageView.setVisibility(View.VISIBLE);textView.setTextColor(Color.parseColor("#99F47C30"));}else {imageView.setVisibility(View.GONE);textView.setTextColor(Color.parseColor("#99000000"));}textView.setText(datas.get(position));return convertView;}}public interface  OnSpinnerItemClickListener{void OnSpinnerItemClick(AdapterView<?> parent, View view, int position, long id);}
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.choe.iosspinner.MainActivity"><FrameLayoutandroid:background="#FFFFFF"android:layout_width="match_parent"android:layout_height="wrap_content"><com.choe.iosspinner.IosSpinnerandroid:layout_marginRight="10dp"android:id="@+id/iosspinner"android:background="#FFFFFF"android:layout_width="match_parent"android:layout_height="40dp"/></FrameLayout>
</RelativeLayout>

MainActivity 文件

 mIosSpinner= (IosSpinner)findViewById(R.id.iosspinner);items=new ArrayList<>();items.add("item1");items.add("item2");items.add("item3");mIosSpinner.init(MainActivity.this,items);currentSlectedItem=mIosSpinner.getSelectedItemPosition();mIosSpinner.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) { //本想是点击自动显示,不需要手动设置 但是会出现错误 没找到很好的解决方案 有办法的小伙伴告知一下mIosSpinner.showWindow();}});mIosSpinner.setOnSpinnerItemClickListener(new IosSpinner.OnSpinnerItemClickListener() {@Overridepublic void OnSpinnerItemClick(AdapterView<?> parent, View view, int position, long id) {currentSlectedItem=mIosSpinner.getSelectedItemPosition();Log.e("当前选中item",""+currentSlectedItem);// TODO do someThing}});

使用时注意:

在init方法时,传入activity的上下文。 其他也没什么,注释详细

获取选中的item时,获得的值是在list的position+1,位置不是从0开始

附下载地址:仿Ios下拉菜单选项

仿Ios下拉菜单,android Spinner效果(美团下拉效果)相关推荐

  1. android联动下拉菜单,Android spinner下拉框连动

    本代码主要功能 1. 向拉菜单 spinner添加数据 2.下拉菜单连动 以下是核心代码 //定义变量 private Spinner spinner3; private Spinner spinne ...

  2. android 收起下拉菜单,Android 展开/折叠 系统下拉通知栏

    最近几天碰到一个郁闷的问题,在有些机型上面使用PendingIntent.getActivity(context, 0, intent, 0)的方式打开一个指定的Activity后,通知栏并不主动折叠 ...

  3. 下拉菜单html菜鸟教程,Bootstrap 下拉菜单

    Bootstrap 下拉菜单(Dropdown)插件 Bootstrap 下拉菜单 这一章讲解了下拉菜单,但是没有涉及到交互部分,本章将具体讲解下拉菜单的交互.使用下拉菜单(Dropdown)插件,您 ...

  4. android 美团下拉菜单,Android仿美团分类下拉菜单实例代码

    本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下 效果图 操作平台 AS2.0 第三方框架:butterknife build.gradle depe ...

  5. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能

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

  6. android studio 下拉菜单,android studio 的下拉菜单Spinner使用详解

    一.认识Spinner Spinner其实就是一个列表选择框.不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择. Spinner 与 Gallery 都继承了Abs ...

  7. html实现导航下拉菜单绝对定位,纯CSS导航下拉效果,神奇的定位与显示属性

    导航下拉,大家首先想到的是用JS来做.或许是大家看到的下拉菜单演示,多是JS控制的下拉,导致从先入为主的意识上,误以为二级下拉是很难的东西,必须要会Javascript才能做. 其实,一个简答的下拉效 ...

  8. jquery 下拉菜单 html,用jquery实现下拉菜单效果的代码

    效果如下: 这是菜单的内容,用ul标签实现菜单: 菜单一 子菜单1 子菜单2 子菜单7 子菜单3 菜单二 子菜单4 子菜单5 子菜单6 这是CSS控制代码: ul,ol,li{list-style:n ...

  9. html5 移动端 下拉菜单,react实现移动端下拉菜单的示例代码

    前言 项目中要实现类似与vant的DropdownMenu:下拉菜单.看了vans 的效果 其实也没什么难度,于是动手鲁了一个这样的组件. 项目的技术栈为react全家桶+material UI + ...

  10. android实现左拉菜单,Android原生侧滑控件DrawerLayout使用方法详解

    在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的"抽屉"功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一 ...

最新文章

  1. 网站结构优化——不能忽视的优化重点
  2. 和 的运算(值)结果 及 Boolean结果
  3. java swing刷新_Swing界面刷新问题(转)
  4. HDU - 4348 To the moon(主席树区间更新-标记永久化)
  5. 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)
  6. linux中 ls |wc -l
  7. 单片机 驱动 标签打印机tsc_指令打印与驱动打印随笔
  8. html怎么给表格加a链接地址,html基础02-图片标签、绝/相对地址、表格的属性、链接的属性及链接的分类、name定义锚点的名称、编码...
  9. CASS10.1 野外操作码
  10. python分词工具
  11. 如何用Java将DWG和DXF文件转换为PDF?看了这篇就懂了
  12. Django3 快速入门
  13. 福大软工1816 · 第四次作业 - 团队展示
  14. 华为手机记事本导出_华为手机便签记事本怎么找到
  15. 【操作系统】知识梳理(十一)多媒体操作系统
  16. 项目Beta冲刺(2/7)(追光的人)(2019.5.24)
  17. 欧姆龙CP1H 原点搜索和原点返回功能
  18. 哔哩哔哩2018.9.21笔试题——扭蛋机(堆的思想解决)
  19. Python 关于时间处理之时间相减
  20. jQuery 删除HTML元素

热门文章

  1. 申请3C产品认证的流程及资料解读(简化版)
  2. 微信小程序[object,object]这样的数据如何打印出来 方便调试~
  3. 上海中小学计算机教师招聘,2020上海复旦大学附属中小学教师统一招聘公告
  4. C语言之printf简介
  5. 启明云端分享:1.54寸彩屏与按摩椅的智慧碰撞
  6. oracle update语句提交,Oracle UPDATE语句使用示例
  7. python 视频下载神器(you-get) 的安装和用法
  8. 计算机网络(树形DP)
  9. 云计算技术-HCIA之VLAN及总结
  10. 强化学习UR机械臂仿真环境搭建(一) - 为UR3机械臂添加robotiq ft300力传感器