1. public class RollActivity extends Activity {
  2. private View view;
  3. private Button btn;
  4. private PopupWindow mPopupWindow;
  5. private View[] btns;
  6. /** Called when the activity is first created. */
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. //      LinearLayout layout=(LinearLayout) view.findViewById(R.id.layout_main);
  12. //      //设置背景图片旋转180
  13. //      Bitmap mBitmap=setRotate(R.drawable.bg_kuang);
  14. //      BitmapDrawable drawable=new BitmapDrawable(mBitmap);
  15. //      layout.setBackgroundDrawable(drawable);
  16. btn=(Button) this.findViewById(R.id.btn);
  17. btn.setOnClickListener(new OnClickListener(){
  18. @Override
  19. public void onClick(View v) {
  20. // TODO Auto-generated method stub
  21. showPopupWindow(btn);
  22. }
  23. });
  24. initPopupWindow(R.layout.popwindow);
  25. }
  26. private void initPopupWindow(int resId){
  27. LayoutInflater mLayoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  28. view = mLayoutInflater.inflate(resId, null);
  29. mPopupWindow = new PopupWindow(view, 400,LayoutParams.WRAP_CONTENT);
  30. //      mPopupWindow.setBackgroundDrawable(new BitmapDrawable());//必须设置background才能消失
  31. mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_frame));
  32. mPopupWindow.setOutsideTouchable(true);
  33. //自定义动画
  34. //      mPopupWindow.setAnimationStyle(R.style.PopupAnimation);
  35. //使用系统动画
  36. mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
  37. mPopupWindow.update();
  38. mPopupWindow.setTouchable(true);
  39. mPopupWindow.setFocusable(true);
  40. btns=new View[3];
  41. btns[0]=view.findViewById(R.id.btn_0);
  42. btns[1]=view.findViewById(R.id.btn_1);
  43. btns[2]=view.findViewById(R.id.btn_2);
  44. btns[0].setOnClickListener(new OnClickListener() {
  45. @Override
  46. public void onClick(View v) {
  47. // TODO Auto-generated method stub
  48. //doSomething
  49. }
  50. });
  51. btns[1].setOnClickListener(new OnClickListener() {
  52. @Override
  53. public void onClick(View v) {
  54. // TODO Auto-generated method stub
  55. //doSomething
  56. }
  57. });
  58. btns[2].setOnClickListener(new OnClickListener() {
  59. @Override
  60. public void onClick(View v) {
  61. // TODO Auto-generated method stub
  62. //doSomething
  63. }
  64. });
  65. }
  66. private void showPopupWindow(View view) {
  67. if(!mPopupWindow.isShowing()){
  68. //          mPopupWindow.showAsDropDown(view,0,0);
  69. mPopupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
  70. }
  71. }
  72. public Bitmap setRotate(int resId) {
  73. Matrix mFgMatrix = new Matrix();
  74. Bitmap mFgBitmap = BitmapFactory.decodeResource(getResources(), resId);
  75. mFgMatrix.setRotate(180f);
  76. return mFgBitmap=Bitmap.createBitmap(mFgBitmap, 0, 0,
  77. mFgBitmap.getWidth(), mFgBitmap.getHeight(), mFgMatrix, true);
  78. }
  79. }

PopupWindow的布局popwindow.xml 
注意3个LinearLayout里必须设置clickable和background,这样当点击上去的时候才会有点击效果。 
android:clickable="true" 
android:background="@drawable/state_btn_pressed"

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="wrap_content"
  6. android:orientation="horizontal"
  7. android:id="@+id/layout_main"
  8. >
  9. <LinearLayout android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:orientation="vertical"
  12. android:gravity="center_horizontal"
  13. android:clickable="true"
  14. android:background="@drawable/state_btn_pressed"
  15. android:layout_weight="1"
  16. android:id="@+id/btn_0"
  17. >
  18. <ImageView android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:scaleType="fitCenter"
  21. android:src="@drawable/ic_call"
  22. >
  23. </ImageView>
  24. <TextView android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:textColor="#000000"
  27. android:textSize="18px"
  28. android:text="电话">
  29. </TextView>
  30. </LinearLayout>
  31. <LinearLayout android:layout_width="fill_parent"
  32. android:layout_height="wrap_content"
  33. android:orientation="vertical"
  34. android:gravity="center_horizontal"
  35. android:clickable="true"
  36. android:background="@drawable/state_btn_pressed"
  37. android:layout_weight="1"
  38. android:id="@+id/btn_1"
  39. >
  40. <ImageView android:layout_width="wrap_content"
  41. android:layout_height="wrap_content"
  42. android:scaleType="fitCenter"
  43. android:src="@drawable/ic_home"
  44. >
  45. </ImageView>
  46. <TextView android:layout_width="wrap_content"
  47. android:layout_height="wrap_content"
  48. android:textColor="#000"
  49. android:textSize="18px"
  50. android:text="空间">
  51. </TextView>
  52. </LinearLayout>
  53. <LinearLayout android:layout_width="fill_parent"
  54. android:layout_height="wrap_content"
  55. android:orientation="vertical"
  56. android:gravity="center_horizontal"
  57. android:clickable="true"
  58. android:background="@drawable/state_btn_pressed"
  59. android:layout_weight="1"
  60. android:id="@+id/btn_2"
  61. >
  62. <ImageView android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"
  64. android:scaleType="fitCenter"
  65. android:src="@drawable/ic_sms"
  66. >
  67. </ImageView>
  68. <TextView android:layout_width="wrap_content"
  69. android:layout_height="wrap_content"
  70. android:textColor="#000"
  71. android:textSize="18px"
  72. android:text="短信"
  73. >
  74. </TextView>
  75. </LinearLayout>
  76. </LinearLayout>

state_btn_pressed.xml,点击的效果:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true"
  4. android:drawable="@drawable/bg_btn_pressed"
  5. android:padding="0dp"/>
  6. </selector>

Android 模仿迅雷的 PopupWindow 出现/消失动画 
出现:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <scale android:fromXScale="0.6" android:toXScale="1.1"
  4. android:fromYScale="0.6" android:toYScale="1.1" android:pivotX="50%"
  5. android:pivotY="50%" android:duration="200" />
  6. <scale android:fromXScale="1.0" android:toXScale="0.91"
  7. android:fromYScale="1.0" android:toYScale="0.91" android:pivotX="50%"
  8. android:pivotY="50%" android:duration="400" android:delay="200" />
  9. <alpha android:interpolator="@android:anim/linear_interpolator"
  10. android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="400" />
  11. </set>

消失:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <scale android:fromXScale="1.0" android:toXScale="1.25"
  4. android:fromYScale="1.0" android:toYScale="1.25" android:pivotX="50%"
  5. android:pivotY="50%" android:duration="200" />
  6. <scale android:fromXScale="1.0" android:toXScale="0.48"
  7. android:fromYScale="1.0" android:toYScale="0.48" android:pivotX="50%"
  8. android:pivotY="50%" android:duration="400" android:delay="200" />
  9. <alpha android:interpolator="@android:anim/linear_interpolator"
  10. android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="400" />
  11. </set>

最后用下面的 XML 封装:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <style name="PopupAnimation" parent="android:Animation"
  4. mce_bogus="1">
  5. <item name="android:windowEnterAnimation">@anim/anim_dialog_show</item>
  6. <item name="android:windowExitAnimation">@anim/anim_dialog_hide</item>
  7. </style>
  8. </resources>

自定义PopupWindow动画效果的更多相关文章

  1. Android 自定义PopupWindow动画效果

    public class RollActivity extends Activity { private View view; private Button btn; private PopupWin ...

  2. 自定义UIView动画效果

    最普通动画: //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UIView setAnimationDuration:]; / ...

  3. 实例源码--Android自定义Gallery动画效果

    相关文档与源码: 下载源码   技术要点: 1.自定义控件的使用 2.Gallery控件的使用实例 3.详细的源码注释 ...... 详细介绍: 1.自定义控件的使用 本套源码通过自定义控件的方式,继 ...

  4. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  5. CSS--使用Animate.css制作动画效果

    一 使用Animate.css动画 // 通过@import引入外部CSS资源; // 引入线上图片及JS文件; // 通过更改CSS类名生成不同类型的CSS3动画;   <!DOCTYPE h ...

  6. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  7. web前端学习(三)css学习笔记部分(8)-- SVN的介绍和应用、CSS动画效果、CSS3布局属性全接触

    15.SVN的介绍和应用 15.1.SVN的介绍和应用课程概要 将代码进行集中管理,有版本号的进行迭代,方便集体工作的build流程 15.2.SVN的介绍 SVN是Subversion的简称,是一个 ...

  8. popupwindow的基本使用以及基本动画效果

    1.创建一个popupwindow view的布局文件自己写一个就好了,这里就不说了 View view= LayoutInflater.from(context).inflate(R.layout. ...

  9. android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

    需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...

随机推荐

  1. javascript 更改控件的class.

    指定 className即可, 如通过id,可这样更改: document.getElementById("myDIV").className = "calssName& ...

  2. DELL R410升级网卡驱动

    官方链接http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php(官方驱动的名字偶尔会改)   注意确保服务器的kernel-dev ...

  3. UIVIew之霓虹灯实现

    // // AppDelegate.m // NiHongPractice // #import "AppDelegate.h" #define kColorValue arc4r ...

  4. PHP String

    PHP 5 String 函数 PHP String 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. 函数 描述 addcslashes() 返回在指定的字符前添加反斜杠的字符串. add ...

  5. Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法"System.String ToString()"问题解决)

    1.在工作中碰到这样一个问题: 使用linq时,需要查询两个表,在这两张表中关联字段分别是int,和varchar()也就是string,在linq中对这两个字段进行关联, 如果强制类型转换两个不同类 ...

  6. 武汉科技大学ACM :1007: A+B for Input-Output Practice (VII)

    Problem Description Your task is to Calculate a + b. Input The input will consist of a series of pai ...

  7. Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止,我们只是介绍了正则表达式的一部分功能.在这一篇中,我们会学习到一些新的元字符,然后再教大家如何使用组来获得被匹配的部分文本. 更多元字符 还有一些元字符我们没有讲到,接下来 ...

  8. Docker容器环境下ASP.NET Core Web API

    Docker容器环境下ASP.NET Core Web API应用程序的调试 本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Dock ...

  9. Swift—Cocoa错误处理模式-备

    Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式采用Cocoa框架错误处理模式,到现在Objective-C还沿用这种处理模式,而S ...

  10. z-index的最大值、最小值

    浏览器 最大值 超过最大值后变成 最小值 小于最小值后变成 备注 IE6 2147483647 2147483647 -2147483648 -2147483648   IE7 2147483647 ...