android实现箭头流程列表_Android弹出选项框及指示箭头动画选择

2023-11-08



Android弹出选项框及指示箭头动画选择

Android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框:

初始化状态:

9c9d86491247544180a32f7242350d1b.png

点击弹出下拉选择选项框:

d826301b9ce6e0722423456155e16b8c.png

选中后:

b408adca9c8b28857aaacf4f7c7b2310.png

注意那个指示箭头,如果把这个控件写的比较精细的话,在下拉-选择-复位过程中箭头是应该有动画旋转效果的。

这种样式的选择框实现方案很多,并且常见、常用,我自己写了一个,我写的这个例子的代码运行结果就是上图所示。

首先是MainActivity.java:

package zhangphil.app;

import android.content.Context;

import android.graphics.Color;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.ListPopupWindow;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private ListPopupWindow listPopupWindow = null;

private ImageView arrowImageView;

private TextView chooseText;

private LinearLayout linearLayout;

private SortAadapter adapter = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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);

}

}

布局文件:

android:layout_width="match_parent"

android:layout_height="match_parent">

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">

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" />

android:id="@+id/arrow"

android:layout_width="14dp"

android:layout_height="14dp"

android:layout_gravity="center_vertical"

android:layout_marginLeft="8dp"

android:src="@drawable/icon" />

LinearLayout的背景需要一个圆角背景res/drawable/round_corner_line_radius_3dp.xml:

xmlns:android="http://schemas.android.com/apk/res/android"

android:shape= "rectangle">

android:width="2px"/>

箭头icon.png:

56be96332f9779ee9de13a209867eff2.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android实现箭头流程列表_Android弹出选项框及指示箭头动画选择 的相关文章

  • vue面试题+答案,2021前端面试

    vue面试题 答案 2022前端面试 前端进阶面试题详细解答 MVC 和 MVVM 区别 MVC MVC 全名是 Model View Controller 是模型 model 视图 view 控制器 controller 的缩写 一种软件
  • 深度学习课程设计——波士顿房价预测

    基于密集连接神经网络的波士顿房价预测 摘 要 神经网络是从信息处理角度对人脑神经元网络进行抽象 建立某种模型 按不同的连接方式组成不同的网络 本文以波士顿房价这一经典数据集为基础 该数据集包含了住宅用地所占比例等13个特征 由于keras
  • rabbitmq基础9——流控、镜像队列、网络分区

    文章目录 一 流控 1 1 流控机制 1 2 流控原理 1 3 流控状态显示 1 4 流控对象 1 5 性能提升 二 镜像队列 2 1 机制原理 2 1 1 集群结构 2 2 镜像结构 2 2 1 组播GM 2 2 1 1 实现原理 2 2
  • 1067 Sort with Swap(0, i) (25 分)

    题目 题目链接 题解 思维 DFS 比较难想的是问题转化的思路 规定a i 表示索引为i处的初始数为a i 我们引入边 由i指向a i 由a i 指向i也可以 将所有n个边都连上后 可能存在若干个环 也可能自己指向了自己 自环 我们思考几种
  • 基于规则的错别字改错

    利用ahocorasick库调用AC自动机寻找已经定义的错别字 不进行分词 并输出错别字开始位置和结束位置 并且在原文中进行改正 import ahocorasick def correct typos text typos 构建 AC 自
  • 字符串排序(函数,指针)(C语言实现)

    编写程序 用户输入n个 n lt 100 字符串 每个字符串长度小于100 按照字典顺序将字符串进行排序 并输出 要求在排序中使用指针数组完成 输入说明 输入第一行是一个整数数字 表示n 接下来有n行字符串 表示待排序字符串 输出说明 输出
  • 虚拟现实期末考试

    考点 考试分比 考试题型单项选择题40 名词解释题10 简答题20 程序设计题8 综合题12 材料分析题10 等 选择题 名词解释 VR 虚拟现实技术 英文名称 Virtual Reality 缩写为VR 是20世纪发展起来的一项全新的实用
  • linux sudo su - 免密配置

    添加用户 sudo useradd d home awen m s bin bash awen 添加用户切换root免密配置 echo awen ALL ALL NOPASSWD ALL gt gt etc sudoers d 90 clo
  • 如何更改电脑开机密码

    以我的电脑为例 是Windows 10系统的笔记本电脑 想要重新设置开机密码 相信大家都有想重新设置密码的冲动 网上也有对应的教程 但是很多人都有一个疑问 为什么根据教程来修改却没有成功 或者是重新登录电脑发现密码根本没有变化 其实不然 这
  • 技术进化对风险隔离与屏蔽超过民众想象

    刷脸支付公众在收获着消费便捷快感的同时 更多地则对刷脸支付的安全性与风险性提出了质疑 与指纹 虹膜等相比 人脸具有弱隐私性的生物特征 而且正是由于手机这一介质的缺失 人脸信息的克隆与利用也会变得 更加容易 相应地 用户使用刷脸支付的风险也就
  • Linux系统卡在iscsi服务导致无法正常开机

    现象 存储网络断开了 机器再开机时卡在开机logo去挂载iscsi 导致没法正常开机 解决办法 1 进救援模式或者单用户模式 将iscsid服务开机自启关了并禁用 关闭自启可能还是存在会被唤醒的情况 systemctl disable is
  • Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin

    Maven项目的两种打包方式 spring boot mavne plugin maven jar plugin 1 前言 Maven的两种打包方式 2 流程图 3 spring boor maven plugin打包 4 maven ja
  • Java架构师的10个学习经验分享,初学者必看

    从零基础学习Java 只要方法正确 依然可以学好Java编程 学习Java就像交朋友一样 要从陌生到熟悉再到铁杆搭档一生相伴的过程 随着深入的了解 你不但会发现学Java并不是和想象的那样无聊和困难 而且还有一些美妙之感 当然在拥有强大的技
  • SecureCRT8.5的下载、安装、注册、连接

    https blog csdn net qq 37233070 article details 120683434
  • 前端Blob文件导出

    前端Blob文件导出 前言 一 Blob是什么 二 axios 拦截器中做统一处理 三 页面全局封装下载组建 总结 前言 通过把blob转file对象的方法下载文件 一 Blob是什么 Blob 对象表示一个不可变 原始数据的类文件对象 B
  • 了解一下Java的日志体系

    目录 了解日子框架体系 分析日志框架如何转换 logback日志的集成 SpringBoot日志使用 常见的一些日志框架如 commons logging jar log4j jar sl4j api jar等 他们之间是存在一定关系的 在
  • mysql错误解决(2003、1045 2800)

    1 2003解决 在D mysql 5 7 26 winx64中新建文件夹data 在bin中进入cmd 运行 mysqld initialize 等一段事件后 重启mysql服务 2 1045 2800 在my ini加入skip gra
  • 【机器学习 & 深度学习】通俗讲解集成学习算法

    目录 集成学习 一 机器学习中的集成学习 1 1 定义 1 2 分类器 Classifier 1 2 1 决策树分类器 1 2 2 朴素贝叶斯分类器 1 2 3 AdaBoost算法 1 2 4 支持向量机 1 2 5 K近邻算法 1 3
  • Pytorch使用NN神经网络模型实现经典波士顿boston房价预测问题

    Pytorch使用多层神经网络模型实现经典波士顿boston房价预测问题 波士顿房价数据集介绍 波士顿房价数据集是一个经典的机器学习数据集 用于预测波士顿地区房屋的中位数价格 该数据集包含了506个样本 每个样本有13个特征 包括城镇的各种

随机推荐

  • Vscode配置已有工程及自动格式化

    这里写目录标题 前言 配置CMake 配置clang clang tidy clang format clangd clang tidy clang format 前言 最近一直在用vscode写代码 发现vscode一旦配置好了真的好用
  • vue3.0 nextTick

    将回调推迟到下一个DOM更新周期之后执行 在更改了一些数据以等待DOM更新后立即使用它 import createApp nextTick from vue 方式一 const app createApp setup const chang
  • Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication解决办法

    node连接数据库报错 Error ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol requested by server conside
  • sqlite3 数据同步

    在一个小项目中 用到 sqlite3 需要同步两个表 懒得装工具 写了两个函数搞掂 贴代码出来给需要的朋友 encoding utf 8 author 陈年椰子 contact hndm qq com version 1 0 file wo
  • Yapi的安装与使用

    前言 YApi 是高效 易用 功能强大的 api 管理平台 旨在为开发 产品 测试人员提供更优雅的接口管理服务 可以帮助开发者轻松创建 发布 维护 API YApi 还为用户提供了优秀的交互体验 开发人员只需利用平台提供的接口数据写入工具以
  • 假设检验3- 卡方分布

    前言 目录 一 卡方分布 二 双边假设检验 三 单边假设检验 四 例子 一 卡方分布 n 个随机变量均符合标准正态分布 则其平方和符合自由度为n的卡方分布 重要性质 二 双边检验 2 1 假设 2 2 统计量 2 3 拒绝域 k1 chi2
  • DevEco Studio Install JS 3.0.0.0 failed.

    安装 DevEco Studio的常见错我 1 Install JS 3 0 0 0 failed 问题原因 npm 配置原因 解决方法如下 1 点击欢迎页中的Configure 或图标 gt Settings gt Build Execu
  • python 时间格式datetime、str与date的相互转换

    在写项目的时候经常会用到时间格式 以及它们之间的相互转化 常用的日期数据格式datetime datetime str datetime date 在使用的时候先导入datetime模块 from datetime import datet
  • 机考[61 -70]

    华为机考 061 寻找身高相近的小朋友 062 寻找相同子串 063 一种字符串压缩表示的解压 064 英文输入法 065 用户调度问题 066 用连续自然数之和来表达整数 067 找车位 068 找出符合要求的字符串子串 069 找朋友
  • ESP32-C3入门教程 基础篇(五、RMT应用 — 控制SK6812全彩RGB 灯)

    测试第五课 本来是准备测试一下PWM驱动 SK6812 RGB灯 但是研究了一段时间 发现在ESP32 C3 有更好而且现成的方式 实现 SK6812 的控制 使用PWM也不是不可以 只是对于初学者 需要多花好多时间 所以本文还是先以ESP
  • ctf-web-sql注入

    题目链接 跳转提示 打开网页 一个登陆页面 根据题是本题题型是基于布尔的SQL盲注 首先在用户名处输入admin 得到结果 即密码确为admin 而如果不输入用户名直接输入密码 发现报错 可见后台是先判断用户名是否正确存在 当用户名正确后再
  • 【强推】10个有趣的Python程序

    1 引言 Python程序有许多模块和第三方包 这非常有助于高效编程 了解这些模块的正确使用方法是很重要的 在本文中 主要介绍一些非常实用的一些Python常见的模块 闲话少说 我们直接开始吧 2 Python伪信息生成器 创建一个程序 生
  • Visual Basic环境:未能加载基类“ShaftAssDesign.XFrmTopClass”。

    文件中的类都不能进行设计 因此未能为该文件显示设计器 设计器检查出文件中有以下类 FrmSetSearch 未能加载基类 ShaftAssDesign XFrmTopClass 请确保已引用该程序集并已生成所有项目 因为vs的版本不同 所以
  • 阿里云OSS+PicGo建立图床踩坑

    在本地写md文档时候插入图片是一件挺麻烦的事情 使用本地图片的话 每次在给别人分享文档或者上传博客的时候就比较难顶了 网上有两种方法可以解决这个问题 一种是使用图片的base64编码 但是图片转换为base64编码之后 编码长度会很大 文档
  • Mac环境下安装Pod

    Mac环境下安装Pod Mac环境下安装Pod 阿里云开发者社区 aliyun com 简介 Mac 环境下安装Pod Pod安装需要ruby ruby需要rvm可以终端中查看rvm 安装没有 如果没有安装则按以下步骤安装 rvm安装 cu
  • implicit declaration of function —— 函数隐式声明 警告

    implicit declaration of function 函数隐式声明 警告 文章目录 错误情况 原因 解决方法 错误情况 在学习 c 语言的过程中 手动使用 clang 进行编译的时候 碰到自定义函数会报出下面的错误 hello
  • 物联网毕业设计 单片机智能温控风扇设计与实现

    文章目录 1 简介 2 绪论 2 1 课题背景 3 系统设计 3 1 系统架构 3 2 硬件部分 3 2 1 DS18B20 简介 3 2 2 LCD1602 液晶屏简介 3 3 软件部分 3 3 1 整体软件流程 3 3 2 初始化 3
  • 数据库Sqlite和mysql

    致谢 https www ssdax com 2188 html https blog csdn net zbw1185 article details 47975965 1概述 数据库可以分为两类 关系型数据库和内存数据库 DB Engi
  • 【算法】McCode度量法

    目录 一 什么是McCode度量法 二 McCabe度量方法计算程序复杂度 三 真题演练 一 什么是McCode度量法 McCabe度量法是由托马斯 麦克凯提出的一种基于程序控制流的复杂性度量方法 McCabe复杂性度量又称环路度量 它认为
  • android实现箭头流程列表_Android弹出选项框及指示箭头动画选择

    Android弹出选项框及指示箭头动画选择 Android原生的Spinner提供了下拉列表选项框 但在一些流行的APP中 原生的Spinner似乎不太受待见 而通常会有下图所示的下拉列表选项框 初始化状态 点击弹出下拉选择选项框 选中后