andorid popupwindow 更新时动画的实现,可实现一个窗口被一个窗口推上去的效果
2014-05-24 18:14
483 查看
最近由于项目需要,一直在寻找一个弹出窗口,在另一个弹出窗口弹出时,推上去的效果,居然找不到,经过不懈的努力,终于实现了popupwindow在更新时的动画。
先上代码:
实现原理其实就是依靠属性动画,但是属性动画只能作用于有set和get方法的属性,所以关键就是写一个包装类,提供属性的set和get方法,在set方法中调用popwindow的update方法,即可在update时实现动画。
讲的不是很清楚,代码如上,如果实在看不懂可以邮件、qq联系。。。
先上代码:
import android.animation.ObjectAnimator; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.PopupWindow; import android.widget.TextView; public class NotePopWindow extends PopupWindow { private TextView mNodeTextView; private Context mContext; private ViewWrapper mWrapper; public NotePopWindow(Context context, int width, int height) { super(LayoutInflater.from(context).inflate(R.layout.fullscreen_view_note_popwindow, null), width, height); mContext = context; setBackgroundDrawable(new BitmapDrawable()); setAnimationStyle(R.style.anim_note_bottombar); initViews(); } public NotePopWindow(Context context) { super(context); } public NotePopWindow(Context context, AttributeSet attributeSet) { super(context, attributeSet); } private void initViews() { mNodeTextView = (TextView) getContentView().findViewById(R.id.note_view); mWrapper = new ViewWrapper(getContentView()); } @SuppressLint("NewApi") public void startUpAnimation() { ObjectAnimator translationRight = ObjectAnimator.ofInt(mWrapper, "Y", (int) mContext.getResources() .getDimension(R.dimen.bottom_menu_window_height)); translationRight.setDuration(540); translationRight.start(); } @SuppressLint("NewApi") public void startDownAnimation() { ObjectAnimator translationRight = ObjectAnimator.ofInt(mWrapper, "Y", 0); translationRight.setDuration(360); translationRight.start(); } private class ViewWrapper { private View mTarget; private boolean isUp = true; public ViewWrapper(View target) { setmTarget(target); } @SuppressWarnings("unused") public int getY() { if (isUp) { isUp = false; return 0; } else { isUp = true; return (int) mContext.getResources().getDimension(R.dimen.bottom_menu_window_height); } } @SuppressWarnings("unused") public void setY(int height) { update(0, height, -1, -1); } @SuppressWarnings("unused") public View getmTarget() { return mTarget; } public void setmTarget(View mTarget) { this.mTarget = mTarget; } } }
实现原理其实就是依靠属性动画,但是属性动画只能作用于有set和get方法的属性,所以关键就是写一个包装类,提供属性的set和get方法,在set方法中调用popwindow的update方法,即可在update时实现动画。
讲的不是很清楚,代码如上,如果实在看不懂可以邮件、qq联系。。。
相关文章推荐
- 利用Animatewindow API实现窗口动画效果
- PopupWindow弹出框与背景变暗的实现(附带动画效果)
- popupwindow 如何实现弹出菜单效果_popupwindow 实现弹出窗口范例
- 用AnimateWindow函数实现窗口动画效果
- AnimateWindow函数实现窗口动画效果
- Android PopupWindow介绍及实现菜单效果
- 怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢?
- android PopupWindow 动画效果
- 怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢?
- 怎么弹出一个既不会被拦截,又是window.open方式实现的最大化弹出窗口?
- 怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢?
- android PopupWindow 和 Activity弹出窗口实现方式
- 用AnimateWindow函数实现窗口动画效果
- Tab切换动画滑动效果的一个简单实现
- 用AnimateWindow函数实现窗口动画效果
- 用 AnimateWindow 函数实现窗口动画效果
- delphi 实现窗口动画效果 Animatewindow 的应用
- 分享一个自己利用javascript中的window.setInterval()定时器实现页面背景图片变换的特效(同时淡入淡出效果)
- 分享一个自己利用javascript中的window.setInterval()定时器实现页面背景图片淡入淡出效果
- 用AnimateWindow函数实现窗口动画效果