android 自定义弹窗diss,Android中自定义PopupWindow,动态弹窗。

我的第一篇博客,咱们直奔主题。先上个效果图

bf632058612af274ff3aca3c59691056.png

在android中自定义PopupWindow:

1、首先定义好你想要显示的窗口的布局文件,再实例化一个View对象:窗口布局可灵活变化,dialog_layout.xml代码如下:

android:id="@+id/dialog_layout"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/dialog_bg"

android:orientation="vertical"

android:padding="5dp" >

android:layout_width="fill_parent"

android:layout_height="0dp"

android:text="@string/tip"

android:gravity="center"

android:textSize="21sp"

android:layout_weight="0.7"

android:textColor="#000000"/>

android:id="@+id/horiz"

android:layout_width="fill_parent"

android:layout_height="0.5dp"

android:background="#000000" />

android:layout_width="fill_parent"

android:layout_height="0dp"

android:layout_weight="0.2"

android:orientation="horizontal" >

android:id="@+id/btn_sure"

android:layout_width="0dp"

android:layout_height="fill_parent"

android:background="@drawable/dialog_btn"

android:gravity="center"

android:text="@string/sure"

android:textColor="#000000"

android:layout_weight="1"

android:textSize="20sp" />

android:id="@+id/vertical"

android:layout_width="0.5dp"

android:layout_height="fill_parent"

android:background="#000000" />

android:id="@+id/btn_cancel"

android:layout_width="0dp"

android:layout_height="fill_parent"

android:background="@drawable/dialog_btn"

android:gravity="center"

android:text="@string/cancel"

android:textColor="#000000"

android:layout_weight="1"

android:textSize="20sp" />

当然这个仅供参考,我在布局的时候之所以用了很多 android:layout_weight 属性,主要是为了在不同分辨率屏幕上有相同的显示效果。

实例化 View 的代码如下:

LayoutInflater inflater = LayoutInflater.from(AnimationAlphaActivity.this);

View view = inflater.inflate(R.layout.dialog_layout,(ViewGroup) findViewById(R.id.dialog_layout));

2、接着实例化一个PopupWindow,代码如下:

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

popupWindow = new PopupWindow(view, dm.widthPixels/4*3, dm.widthPixels/2);

这里会根据不同屏幕确定对话框的大小。

3、设置动画效果,首先定义对话框显示的动画效果,在 res 文件夹下面新建一个名为 anim 的文件夹(养成良好的习惯),在里面定义对话框显示时的动画 dialog_show_anim.xml ,参考代码如下:

android:duration="200"

android:fromXScale="0.0"

android:fromYScale="0.0"

android:toXScale="1.0"

android:toYScale="1.0"

android:pivotX="50%"

android:pivotY="50%"/>

附加说明:安卓提供的动画有四种,分别是translate(位移变换),alpha(透明渐变),rotate(旋转变换),scale(大小变换)。

fromYScale[float]  为动画起始时,X、Y坐标上的伸缩尺寸;0.0表示收缩到没有 ;1.0表示正常无伸缩. 值小于1.0表示收缩. 值大于1.0表示放大toXScale [float];

toYScale[float]    为动画结束时,X、Y坐标上的伸缩尺寸pivotX[float];

pivotY[float]      为动画相对于物件的X、Y坐标的开始位置属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置;

类似的,我们还要定义一个让对话框消失的动画,效果跟上面的相反,上面是从 0 的比例放大到 1 的比例。消失则是从1 的比例缩小到 0(消失)。

dialog_dissmiss_anim.xml 代码如下:

android:duration="200"

android:fromXScale="1.0"

android:fromYScale="1.0"

android:pivotX="50%"

android:pivotY="50%"

android:toXScale="0.0"

android:toYScale="0.0" />

两个都写好之后我们要在 value 目录下的style.xml(没有的话新建一个)定义对话框的动画类型,以便于代码引用,style.xml 参考代码如下:

4、代码中调用PopupWindow 的setAnimationStyle 方法即可设定动画。参考代码如下:

popupWindow.setAnimationStyle(R.style.dialog_anim);

总结:1、对于PopupWindow 自定义显示的内容我们可以在实例化 PopupWindow 的时候传入自己做好的界面布局。

2、对于动画,我们先定义两个xml文件分别控制显示动画及消失动画,最后在style.xml文件中将两个动画合二为一给代码调用。

3、对于PopupWindow显示的位置可以参考PopupWindow的 show** 方法。

转载请注明出处。

技术因分享而强大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼图项目的动机和目标

几周前,我写了一篇关于Jigsaw项目如何破坏现有代码的文章 。 那么,我们能得到什么回报呢? 让我们看一下项目解决的痛点及其在Java 9中解决问题的目标。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序(不同…

android中按一个按钮弹出字,允许用户在Android中长按一次即可编辑按钮文字

我想允许App用户在Android中更改Button文本。 当用户单击按钮时,它应该执行某些操作,但是当他/她长按按钮时,将弹出一个编辑文本,并且无论用户键入什么内容都应另存为按钮文本。到目前为止,我已经完成了以下操作。btn1…

关于单元测试脚手架的几点思考

莱昂:Luc Besson的专业人士 当我开始通过创建相同的对象并准备数据来运行测试来重复使用单元测试方法时,我对设计感到失望。 带有大量代码重复的长时间测试方法看起来并不正确。 为了简化和缩短它们,基本上有两个选项,至少在Java…

android 使用c 代码实现,JNI开发实现helloworld,调用自己的C代码实现(1)

JNI开发,实现自己的C代码,helloworld在这里实现一个简单的demo,完成加载自己的C代码使用Android studio,一步一步教你实现在屏幕上显示出helloworld如下图显示,配置号NDK的路径,没有路径的需要自己下载,在A…

使用WSO2 ESB进行邮件内容过滤

每个集成架构师或开发人员都应该熟悉Gregor Hohpe和Bobby Woolf所描述的企业集成模式(EIP) 。 模式之一是“内容消息过滤器” (不要与消息过滤器模式混淆)。 使用不同的Mediator在WSO2中有多种方法可以实现此目的。 一种方法是使…

android壁纸应用,HPSTR - 可能是你见过最会玩的壁纸应用 - Android 应用 - 【最美应用】...

今天这款 HPSTR 壁纸应用也不例外,HPSTR 主要的壁纸素材源来自 Unsplash(ios/android)、500px(android)、Reddit(android)这些素材源的图片都很优秀,特别是 Unsplash 它是著名的无版权图片网站。它家主要以风景为主,数量也足够多,…

android sqlite批量操作,Android: SQLite批量插入数据的最佳实践

大家都知道,Android里数据库用的是SQLite。在实际开发过程中,我们有时候会遇到批量插入数据的场景。这篇文章给大家分享一个小技巧,让批量插入数据达到最快的目的。首先,我先创建一个Table,里面只有一个字段&#xff1…

c语言实现linux下的top命令来获取cpu利用率_有用的一篇笔记,linux 调优各项监控指标...

自开始负责生产环境部署,中间遇到了若干线上环境内存以及CPU的问题。由于微服务以及容器的流行,现在已经可以很方便的使用 K8s prometheus grafana alert 的方式进行监控,这足以覆盖大部分场景。最重要的事情已经交由最适合的组件去做&…

rip协议中周期性广播路由信息的报文_技术实操||距离矢量路由协议-RIP

距离矢量路由协议—RIP01距离矢量路由协议概述路由信息协议RIP(RoutingInformation Protocol)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。RIP是一种比较简单的…

使用tinylog 1.0简化您的日志记录

tinylog的大小仅为75 KB,是广泛使用的经典日志记录框架Log4j和Logback的轻型替代方案。 经过三年的开发,最终版本1.0刚刚于 3月底发布 。 在几个设计问题中,tinylog采取了与Java中经典日志记录框架完全不同的方法。 本文将介绍与Log4j和Logba…

华谊兄弟出现什么问题_什么是语言训练?这就要从语言问题的出现说起了

开口、发音是每一个孩子在语言发展过程中所不可少的经历,他们从周围环境中获取到的各种信息转化为想要表达的内容。虽然一开始孩子的语言并没有成年人那么流畅和准确,但随着时间的推移,他们的说话发音愈发成熟。只是,并不是所有孩…

【算法提升—力扣每日一刷】五日总结【12/18--12/22】

文章目录 2023/12/18LeetCode每日一刷:[20. 有效的括号](https://leetcode.cn/problems/valid-parentheses/) 2023/12/19LeetCode每日一刷:[150. 逆波兰表达式求值(后缀表达式运算)](https://leetcode.cn/problems/evaluate-rever…

CompletableFuture不能被打断

我已经写了很多有关InterruptedException和中断线程的文章 。 简而言之,如果您没有Future.cancel()调用Future.cancel()那么Future将终止待处理的get() ,但还将尝试中断基础线程。 这是一个非常重要的功能,可以更好地利用线程池。 我还写信总…

crio电压采集 labview_NI cDAQ917采集温度方法

NI cDAQ-9171是一款由总线供电的单槽NI CompactDAQ USB机箱,适合较小的便携式传感器测量系统。cDAQ-9171可与50多款专用测量模块配合使用,用于构建模拟输出、数字I/O或计数器/定时器测量系统。这些模块适用于各种传感器测量,包括热电偶、RTD、…

android finish 区别,Android Activity类finish、onDestory和System.exit介绍

image.pngfinish函数Activity.finish()Call this when your activity is done and should be closed.在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。当调用此方法的时候,系统只是将最上面的Activity移出了栈&#xf…

在JVM中记录世界停顿

不同的事件可能导致JVM暂停所有应用程序线程。 这种暂停称为世界停止(STW)暂停。 触发STW暂停的最常见原因是垃圾回收( 例如github中的示例 ),但是不同的JIT操作( 示例 ),偏向锁吊销…

jOOQ与Hibernate:何时选择哪个

Hibernate已成为Java生态系统中的事实上的标准,事实上, 如果标准对您很重要 ,并且如果您将JCP与ISO,ANSI,IEEE等置于同一级别,那么Hibernate也是实际的JavaEE标准实现。 本文的目的不是讨论标准&#xff0…

linux怎么才能算telnet成功_怎么表白才算成功呢

要怎样表白才算成功呢?其实如果对方也有点喜欢你的,对你有点感觉的,不管怎样表白,你都会成功的,相反,如果对方本身就对你没感觉的,不管你要怎么轰轰烈烈的表白,你都不会成功。下面&a…

我们真的仍然需要32位JVM吗?

即使到了今天(2015年),我们仍然有两个版本或Oracle HotSpot JDK –已调整为32或64位体系结构。 问题是我们是否真的想在服务器甚至笔记本电脑上使用32位JVM? 我们应该有很受欢迎的意见! 如果只需要较小的堆&#xff0c…

html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法

本文实例讲述了JavaScript实现文字与图片拖拽效果的方法。分享给大家供大家参考。具体实现方法如下:JavaScript实现文字与图片的拖拽效果*{padding:0;margin:0;}.tips{position:absolute;background:#eee;}图片可以拖动脚本之家拖动链接也可以var $idfunction(id){r…