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联系。。。

  • 相关阅读:
    【web安全】浅谈web安全之XSS
    【css】浅谈BFC
    nodejs笔记一--模块,全局process对象;
    逼真打字机效果;
    深入理解CSS3 animation的steps
    网址链接收藏
    用hoverclock插件实现HTML5时钟
    JS多种方法实现随机颜色;
    canvas实现跟随鼠标旋转的箭头
    封装insertAfter、addClass、格式化时间
  • 原文地址:https://www.cnblogs.com/zj2012zy/p/3750170.html
Copyright © 2011-2022 走看看