在工作中难免遇到自定义 View 的相关需求,本身这方面比较薄弱,因此做个记录,也是自己学习和成长的积累。自定义View实战

前言

年前的最后一个开发需求,将之前H5开卡界面转变成native。意思就是开卡这个需求做成Android原生的界面,就这单单一个界面需要请求 8 个接口!可想逻辑是有多复杂,其中中间有个小需求-「选择银行卡」。来看一下UI出图。

设计图

大致就是点击「银行」弹出popupWindow,在里面嵌套一个银行选择器。这个「银行选择器」可以滚动类似IOS那边的UIPickerView,或者安卓的日期选择器,但是为了完成特殊的定制效果,所以咱们得自己写一个。BankPickerView

看一下效果图:

BankPickerView.gif

实现

思路其实也很简单。

滚动

ScrollView、ListView和RecyclerView都可以实现滚动,这自然不用说,首尾都有offset个位置是留占坑,可以添加空数据作为占坑的显示。

回弹

那就在手指松开的时候,拿到滑动的距离,通过一系列的逻辑处理,回弹到最近的Item处即可。

回调

在滑动停止的时候,通过计算获取当前所处的item的位置,通过listener回调给调用者。

因为时间有限,所以没对其进行封装,如果想使用请自行下载,通过修改源码满足特定的需求。

至于弹出的效果,用的是popupWindow,其中遇到了一下坑,在这里记录并分享一下。

背景透明

popupWindow不像dialog本身是没有背景透明的效果的,需要自己实现。主要就是两种实现方式。

xmlns:skin="http://schemas.android.com/android/skin"

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

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#7D000000"

skin:enable="true">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#fff"

android:layout_alignParentBottom="true"

android:orientation="vertical">

一种就是直接在pooupWidnow展示的布局强行假如半透明的背景。

第二种获取WindowManager修改当前窗口的透明值。

点击返回关闭 popupWindow

首先如果想实现点击返回让popupWindow消失,就得实现View.OnKeyListener接口,并且在回调中,让其消失。

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

dismiss();

return true;

}

return false;

}

但是你会发现并没有生效,那是因为当前没有获取到焦点,需要设置setFocusable(true)即可。

android 行布局选择器,『自定义View实战』—— 银行种类选择器相关推荐

  1. android 选择银行类型,『自定义View实战』—— 银行种类选择器

    在工作中难免遇到自定义 View 的相关需求,本身这方面比较薄弱,因此做个记录,也是自己学习和成长的积累.自定义View实战 前言 年前的最后一个开发需求,将之前H5开卡界面转变成native.意思就 ...

  2. 『自定义View实战』—— 仿ios图标下载view DownloadLoadingView

    2019独角兽企业重金招聘Python工程师标准>>> ## 前言 最近项目需要接入环信客服 SDK ,我配合这同事完成,其中我负责文件下载这部分. 因为时间比较紧张,8 天的时间完 ...

  3. android 弹出菜单环形,『Android自定义View实战』实现一个小清新的弹出式圆环菜单...

    前言 Android表现快捷菜单的形式有很多种,比如使用PopupWindow弹出来的小弹窗,类似QQ的侧拉功能菜单,以及之前讲过的弧形菜单( Android 自定义弧形旋转菜单栏--卫星菜单),这次 ...

  4. android 图片处理过程中添加进度条,『Android自定义View实战』给我一个图标,还你一个水波纹进度球...

    前言 我们都知道,平时表现进度的方式有千千万万种(没有UI想不到的,只有你做不到的= =.),其中有一种就是水波纹进度球的形式,网上很多种实现都是直接采用纯色填充的方式,即水波纹都是纯颜色填充,效果看 ...

  5. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  6. Android 系统(201)---Android 自定义View实战系列 :时间轴

    Android 自定义View实战系列 :时间轴 Android开发中,时间轴的 UI需求非常常见,如下图: 本文将结合 自定义View & RecyclerView的知识,手把手教你实现该常 ...

  7. 【Android自定义View实战】之自定义评价打分控件RatingBar,可以自定义星星大小和间距...

    [Android自定义View实战]之自定义评价打分控件RatingBar,可以自定义星星大小和间距

  8. [自定义控件]android自定义view实战之太极图

    android自定义view实战之太极图 尊重原创,转载请注明出处: http://blog.csdn.net/qq137722697 自定义view是Android工程师进阶不可避免要接触的,我的学 ...

  9. Android进阶之自定义View实战(二)九宫格手势解锁实现

    一.引言 在上篇博客Android进阶之自定义View实战(一)仿iOS UISwitch控件实现中我们主要介绍了自定义View的最基本的实现方法.作为自定义View的入门篇,仅仅介绍了Canvas的 ...

最新文章

  1. MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
  2. 软件项目开发流程RUP上
  3. sdn专线架构是怎样的?如何工作?——Vecloud
  4. 直播 | 清华大学郑楚杰:知识增强对话生成中的差异感知知识选择
  5. FFmpeg代码导读——HEVC在RTMP中的扩展
  6. 微软面向初学者的机器学习课程:3.1-构建使用ML模型的Web应用程序
  7. win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具
  8. EJB分布式对象实现方式描述
  9. 【2016年第5期】位置大数据在车辆保险风险管理中的应用
  10. AI工程师的崩溃,是从你的薪资比我高开始
  11. 12864汉字液晶显示驱动程序
  12. mysql报错:Host ***.***.***.*** is not allowed to connect to this MySQL server
  13. 简单理解JavaScript中的闭包
  14. Range的学习笔记
  15. 用selenium做模拟登录163邮箱(有两种方式,行为链)
  16. deb包一般放在linux的哪个目录下,deb包安装目录详解
  17. 魔兽世界 圣骑士唯一的远程武器任务
  18. Altium Designer使用介绍和界面介绍
  19. 中国电信无线网服务器,如何使用路由器共享电信天翼无线网络?
  20. ESP8266 Ticker学习

热门文章

  1. s5pv210——I2C的代码实践
  2. STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法
  3. H5活动产品设计指南基础版
  4. [luoguP2760] 科技庄园(背包DP)
  5. iSCSI存储设备的udev绑定 以及iscsi重启卡住解决方法
  6. Asp.net 中 Eval 调用后台函数的写法
  7. Postgres主进程文件—postmaster.pid
  8. c++ 线程间通信方式
  9. 一种简单、实用的测量程序运行时间的方法
  10. mysql模糊查询与预编译_mysql预编译模糊查询恶心了我一天的时间,终于弄好了。但是还有一点不明白。如下:...