PopupWindow 常用方法记录

PopupWindow可以实现浮层效果,而且可以自定义显示位置,出现和退出时的动画。

首先解析一个View

LayoutInflater inflater = getLayoutInflater();
final View view = inflater.inflate(R.layout.popup, null);

创建PopupWindow
构造参数 PopupWindow(View contentView, int
width, int height, boolean focusable)。

contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。

focusable为是否可以获得焦点,这是一个很重要的参数。

这里需要为popupWindow设置一个背景,点击其他区域才能让PopupWindow消失。

PopupWindow popupWindow = new PopupWindow(view, 400, 400, true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());

显示PopupWindow

showAsDropDown(View anchor)://相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff)://相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y)://相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移

为PopupWindow指定动画

PopupWindow出现时的动画,popup_enter.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="0" android:toYScale="1.0"
android:pivotX="50%" android:pivotY="0%"
android:duration="100" />
</set>

PopupWindow消失时的动画,popup_exit.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="1.0" android:toYScale="0"
android:pivotX="50%" android:pivotY="0%"
android:duration="50" />
</set>

再设定动画的style

<style name="PopupAnimation" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/popup_enter</item>
<item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>

最后通过Java代码设置动画

popupWindow.setAnimationStyle(R.style.PopupAnimation);  

另外在记录一个从屏幕底部弹出的动画

menu_bottombar_in.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="100.0%"
android:toYDelta="0.0" />
</set>

menu_bottombar_out.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="0.0"
android:toYDelta="100%" />
</set>

定义样式

<style name="anim_menu_bottombar">
<item name="android:windowEnterAnimation">@anim/menu_bottombar_in</item>
<item name="android:windowExitAnimation">@anim/menu_bottombar_out</item>
</style>

最后显示showAtLocation(findViewById(R.id.layout_main),
Gravity.BOTTOM, 0, 0);

PopupWindow 常用方法记录,布布扣,bubuko.com

时间: 2024-10-13 00:17:04

PopupWindow 常用方法记录的相关文章

sun.misc.Unsafe中一些常用方法记录

sun.misc.Unsafe中一些常用方法记录 前情摘要 sun公司提供了可以用于直接操作内存的类,这个类就是sun.misc.Unsafe.因为Java本身是不会涉及到直接操作内存的,Java API也没有提供这些操作,内存管理全部交给虚拟机来做.Sun之所以提供这个类,因为有些功能现有的Java API满足不了,如果没有这个类,可能就没有现在原子类,J.U.C包了,也许也没了各种Concurrent Collection类,可能也没了NIO的堆外内存,所以这个类十分的有用,并且很重要,Su

JS常用方法记录

//对Object的num字段进行排序 var compare = function (propertyName) { return function (object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value2 < value1) { return -1; } else if (value2 > value1) { return 1; } else

Linux基础教程 linux中使用find命令搜索文件常用方法记录

find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方法. 1.命令格式 find 搜索路径 搜索表达式 搜索路径:这个比较容易理解,就是指定的搜索目录,比如/etc.搜索路径也可以同时指定多个,用空格分开就可以了,如/etc /home. 搜索表达式:find命令关键就是在表达式上,表达式的选项非常多.以下命令测试主要根据表达式的选项来划分. 2.命

apache commons - lang 常用方法记录

Lang 中工具类比较多,这里介绍几个主要的: ClassUtils:  getShortClassName,这个函数应该在 java.lang.Class 类中有的,我看到很多人自己写这个函数.getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass. NumberUtils: 关于数字以及数字和字符串转换的类 stringToInt,toDouble,createNum

『Numpy』常用方法记录

numpy教程 广播机制 numpy计算函数返回默认是一维行向量: import numpy as np a = [[1,1,1], [2,2,2], [3,3,3]] b = (np.sum(a,axis=1)) c = (np.sum(a,axis=0)) print(b,'\n',c) # [3 6 9] # [6 6 6] 所以广播之实际是高维对一维行向量的广播: 除法广播: b = a/(np.sum(a,axis=1)) c = a/(np.sum(a,axis=0)) print(

日常工作中常用方法记录

1.根据数组对象中的某一个属性进行排序 var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; function compare(property){ return function(a,b){ var value1 = a[property]; var value2 = b[property]; return value1 - value2; } } console.log(arr.sort(com

『Re』正则表达式模块_常用方法记录

『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的match ()和search ()等方法. 实际有两种使用方式: pattern.匹配方法(string) 或者 re.匹配方法(pattern,string) 使用或|来强化匹配规则: pattern_t = re.compile( '[0-9〇一二三四五六七八九]{4}年.{1,2}月.{1,3

『Pickle』数据结构持久化模块_常用方法记录

可以把数据结构保存进文件并直接读出, 不论读取或者是保存,我们都需要借助open()函数,并且是二进制方式('wb','rb') json模块可以把字典结构改写为string然后保存,并可以反向读取字典,但是即使是字典数据结构,两个包也是有差别的 json字典value不支持其他对象只支持python原有的结构,但是json由于是转换为string,所以保存的文件是可以使用文本查看器去读取的 pickle包则支持各种python的对象,但它写入的是二进制文件,并有自己独特的编码方式,所以是不可以

JAVA中一些需要记录的知识点(基础部分)

为了准备一年以后的校招,开始重头在复习一遍JAVA,为了方便初学者或者其他在整理基础知识的朋友,发个日志,欢迎讨论,并指出错误,谢谢! JDK与JRE的区别: JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从JAVA官网选择安装JAVA即安装的是JRE. JDK是为开发人员所提供的工具包,对开发人员来说属于必备项,一般在JDK本身包含JRE,但是一般JDK还会再安装一套JRE,这一套JRE被成为公共JRE(如图),JDK需要从oracle的官网下载. 当前的