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

前言

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

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

看一下效果图:

实现

思路其实也很简单。

滚动

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实战』给我一个图标,还你一个水波纹进度球...

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Java网络编程实例---------------------------------基本HTTP客户端及服务端多线程
  2. 软件压力测试linux服务器,使用http_load来给Linux系统的服务器做压力测试
  3. C# 字符串操作:split、substring、Format
  4. vuejs模仿实现一个电影分享类网站
  5. Homebrew简单使用
  6. 网络异步编程(C#)团购课
  7. mysql 12_Navicat for MySQL12免费版
  8. 挑战程序设计竞赛:三角形
  9. docker镜像存储在哪里
  10. 混淆的艺术-(苍井空变凤姐)Proguard源码分析(一)前言和计划
  11. antd 日期组件出现了英文
  12. 搜狗VS有道,搜索市场追赶者
  13. java 中的todo_详解在TodoController中引用TodoRepository
  14. 机器学习经典算法---线性回归(Linear Regression)算法
  15. 18对个人财富的窥视——对一款手机木马的解读及分析
  16. python生成loss/acc训练曲线
  17. 高完整性系统(4)Formal Logic (形式逻辑和 Alloy 简介)
  18. 屏蔽winrar压缩软件弹出广告
  19. 视频行为识别-1数据库
  20. 沙行勉 python_清华大学出版社-图书详情-《智能机器人原理与实践》

热门文章

  1. linux jdk路径
  2. JS JQ 页面加载顺序方法的区别
  3. win10+anaconda3+python3.6+opencv3.1.0
  4. linux/ubuntu查看内核版本命令
  5. 非常不错的Coding-iOS开源项目
  6. Spring中注入List,Set,Map,Properties的xml文件配置方法
  7. Mono for Android 4.2初探
  8. 扫描识别工具Dynamic Web TWAIN使用教程:单独添加/删除对象
  9. [NOI2015Day1]解题报告
  10. 从0开始学习 GitHub 系列之「团队合作利器 Branch」