zoukankan      html  css  js  c++  java
  • andorid popupwindow 更新时动画的实现,可实现一个窗口被一个窗口推上去的效果

    最近由于项目需要,一直在寻找一个弹出窗口,在另一个弹出窗口弹出时,推上去的效果,居然找不到,经过不懈的努力,终于实现了popupwindow在更新时的动画。

    先上代码:

     1 import android.animation.ObjectAnimator;
     2 import android.annotation.SuppressLint;
     3 import android.content.Context;
     4 import android.graphics.drawable.BitmapDrawable;
     5 import android.util.AttributeSet;
     6 import android.view.LayoutInflater;
     7 import android.view.View;
     8 import android.widget.PopupWindow;
     9 import android.widget.TextView;
    10 
    11 public class NotePopWindow extends PopupWindow {
    12     private TextView mNodeTextView;
    13     private Context mContext;
    14     private ViewWrapper mWrapper;
    15 
    16     public NotePopWindow(Context context, int width, int height) {
    17         super(LayoutInflater.from(context).inflate(R.layout.fullscreen_view_note_popwindow, null), width, height);
    18         mContext = context;
    19         setBackgroundDrawable(new BitmapDrawable());
    20         setAnimationStyle(R.style.anim_note_bottombar);
    21         initViews();
    22     }
    23 
    24     public NotePopWindow(Context context) {
    25         super(context);
    26 
    27     }
    28 
    29     public NotePopWindow(Context context, AttributeSet attributeSet) {
    30         super(context, attributeSet);
    31     }
    32 
    33     private void initViews() {
    34         mNodeTextView = (TextView) getContentView().findViewById(R.id.note_view);
    35         mWrapper = new ViewWrapper(getContentView());
    36     }
    37 
    38     @SuppressLint("NewApi")
    39     public void startUpAnimation() {
    40         ObjectAnimator translationRight = ObjectAnimator.ofInt(mWrapper, "Y", (int) mContext.getResources()
    41                 .getDimension(R.dimen.bottom_menu_window_height));
    42         translationRight.setDuration(540);
    43         translationRight.start();
    44     }
    45 
    46     @SuppressLint("NewApi")
    47     public void startDownAnimation() {
    48         ObjectAnimator translationRight = ObjectAnimator.ofInt(mWrapper, "Y", 0);
    49         translationRight.setDuration(360);
    50         translationRight.start();
    51     }
    52 
    53     private class ViewWrapper {
    54         private View mTarget;
    55         private boolean isUp = true;
    56 
    57         public ViewWrapper(View target) {
    58             setmTarget(target);
    59         }
    60 
    61         @SuppressWarnings("unused")
    62         public int getY() {
    63             if (isUp) {
    64                 isUp = false;
    65                 return 0;
    66 
    67             } else {
    68                 isUp = true;
    69                 return (int) mContext.getResources().getDimension(R.dimen.bottom_menu_window_height);
    70             }
    71 
    72         }
    73 
    74         @SuppressWarnings("unused")
    75         public void setY(int height) {
    76             update(0, height, -1, -1);
    77         }
    78 
    79         @SuppressWarnings("unused")
    80         public View getmTarget() {
    81             return mTarget;
    82         }
    83 
    84         public void setmTarget(View mTarget) {
    85             this.mTarget = mTarget;
    86         }
    87     }
    88 }

    实现原理其实就是依靠属性动画,但是属性动画只能作用于有set和get方法的属性,所以关键就是写一个包装类,提供属性的set和get方法,在set方法中调用popwindow的update方法,即可在update时实现动画。

    讲的不是很清楚,代码如上,如果实在看不懂可以邮件、qq联系。。。

  • 相关阅读:
    laravel 使用DB 鏈接leftJoin查詢
    checkbox复选框,如何让其勾选时触发一个事件,取消勾选时不触发
    js获取上传图片大小,判断上传图片类型,获取图片真实宽度和高度
    如何查看crontab的日志记录
    linux应用之gcc环境的安装
    laravel 获取上一条insert语句产生的id
    laravel多条件查询(and,or嵌套查询)
    laravel ORM 模型关联 with () 用法
    js实现表单提交 onsubmit
    如何利用jquery来给input添加或删除disabled属性
  • 原文地址:https://www.cnblogs.com/zj2012zy/p/3750170.html
Copyright © 2011-2022 走看看