PopupWindow
来源:互联网 发布:4g网络优化工程师前景 编辑:程序博客网 时间:2024/05/19 18:39
今天的主题是PopupWindow,游戏的一关结束了,就会弹出类似游戏评分之类的信息。今天我们要实现的就是这种效果
效果图如下:
其中我给“过关”两个字加了一点点的动画,这样看起来更爽。
首先看布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/pop_bg" android:layout_width="250dp" android:layout_height="150dp" android:background="#DD000000" android:layout_centerInParent="true" android:gravity="center_horizontal" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="25dp" android:gravity="center" /> <ImageView android:contentDescription="@null" android:layout_width="match_parent" android:layout_height="1dp" android:background="#F5F5DC" /><LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginTop="30dp" android:gravity="center" > <TextView android:id="@+id/guo" android:layout_width="45dp" android:layout_height="45dp" android:gravity="center" android:text="@string/guo" android:textColor="#FFFFFF" android:textSize="30sp" android:visibility="invisible" /> <TextView android:id="@+id/guan" android:layout_width="45dp" android:layout_height="45dp" android:gravity="center" android:text="@string/guan" android:textColor="#FFFFFF" android:textSize="30sp" android:visibility="invisible" /></LinearLayout> </LinearLayout> <ImageButton android:contentDescription="@null" android:id="@+id/ok" android:layout_width="15dp" android:layout_height="15dp" android:layout_alignRight="@id/pop_bg" android:layout_alignTop="@id/pop_bg" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:background="@drawable/icon_delete" /></RelativeLayout>
其实不难,布局这东西,就是考验你的创造力,反正我是这么认为的。这个布局也就是实现了PopupWindow中的布局。
有了布局,我们就要将布局加入到我们的PopupWindow中,代码如下:
View view = LayoutInflater.from(this).inflate(R.layout.popwindow, null);final PopupWindow window = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
其实,到这里今天的主题就成了一大半。
如何显示我们的PopupWindow呢?
通过看方法有如下的三种方法显示:
解释一下三个方法的意义:
1. 让 PopupWindow 在 anchor的左下方显示;
2. 跟第一个效果差不多,只是添加了X,Y方向上的偏移量,所以不用多说了。
3. 第一个参数很困惑,以后研究出来在分享,或者如果你们清楚可以给我留言。第二个对齐方式,第三四个可以理解为偏移量。
显示PopupWindow方法,我采用的第三种:
window.showAtLocation(v, Gravity.CENTER, 0, 0);
这个方法写在了一个监听里,所以第一个v就是传入的,但是这里我试着用其他的view不会影响效果,这点十分困惑。
如何关闭监听,如下:
dismiss = (ImageButton) view.findViewById(R.id.ok);dismiss.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {window.dismiss();}});
就是使用dismiss()来关闭的。
总体的监听代码如下,这其中包括了动画效果:
image.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {window.showAtLocation(v, Gravity.CENTER, 0, 0);//window.showAsDropDown(v);//window.showAsDropDown(v, 50, 50);if (View.VISIBLE == guan.getVisibility()){guan.setVisibility(View.INVISIBLE);}guo.setVisibility(View.VISIBLE);ScaleAnimation scaleAnimation = new ScaleAnimation(2.0F, 1.0F, 2.0F, 1.0F,Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);scaleAnimation.setDuration(500);guo.startAnimation(scaleAnimation);scaleAnimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation arg0) {}@Overridepublic void onAnimationRepeat(Animation arg0) {}@Overridepublic void onAnimationEnd(Animation arg0) {guan.setVisibility(View.VISIBLE);ScaleAnimation scaleAnimation = new ScaleAnimation(2.0F, 1.0F, 2.0F, 1.0F,Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);scaleAnimation.setDuration(500);guan.startAnimation(scaleAnimation);}});}});
大致就是这样了,运行一下我们所要的效果就出来。
明天周五了,期待的好声音又要开播了。
PS: 2015-03-07 补充
开发时,有时可能要在PopupWindow中添加EditText,会发现输入不了的情况,但是我们的光标还在闪烁,解决的办法就是给PopupWindow添加焦点
final PopupWindow pWindow = new PopupWindow(v, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);pWindow.setFocusable(true);pWindow.showAtLocation(v, Gravity.CENTER, 0, 0);
这样就可以弹出键盘,输入我们的内容了。
PS:2015-03-11补充
有的时候为了PopupWindow随着,输入法的弹出而适应,我们就得加下面的属性:
pWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
这样,即使上面要输入,也不会出现应为输入法而遮住了我们的界面,当输入法隐藏了之后,界面有恢复了原先的位置,很好。
还有一点需要补充的就是,我们设置了EditText后,发现光标跑到最开始去了,这里我们要加一句这样的代码:input.setSelection(i);这样光标就一直都在最后面。
- popupwindow
- popupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- popupwindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- PopupWindow
- popupwindow
- popupwindow
- PopupWindow
- POI.HSSF.util.HSSFColor中所有颜色索引
- linux命令:mv命令
- MVC 设计框架
- 最详细安卓ADT插件安装教程
- jQuery学习总结四 --- 功能性表格的开发
- PopupWindow
- PowerBuilder数据窗口对象(转)
- MSP430--时钟模块
- maven编译带中文的工程时出现syntax error的问题
- JAVA学习篇--JAVA的两种编程模式对比
- HDU2098 分拆素数和
- RFID学习(七)ID卡
- 我要上CSDN。。。。。。
- 【笔记】移动大趋势2014