使用View 的setDrawingCacheEnabled获取整个activity的缓存快照,进行渐变动画
来源:互联网 发布:婚礼绘图软件 编辑:程序博客网 时间:2024/06/10 17:53
在项目中用到了夜间模式切换,需要一个动画效果。于是想到了在decorView中使用setDrawingCacheEnabled来获得当前整个view树的缓存快照。然后对把整个快照放到一个imageView中,进行渐变处理。具体如下:
public static void showChangeNightModeAnim(Activity activity, Animator.AnimatorListener animatorListener) { if (activity == null) { return; } final ViewGroup container = (ViewGroup) activity.getWindow().getDecorView(); if (container == null) { return; } final ImageView imageView = new ImageView(activity); container.setDrawingCacheEnabled(true); Bitmap drawingCache = null; try { Bitmap cache = container.getDrawingCache(); if (cache != null && !cache.isRecycled()) { drawingCache = Bitmap.createBitmap(cache); } else { LogHelper.logE(TAG, "showChangeNightModeAnim : container.getDrawingCache() = " + cache); } } catch (OutOfMemoryError error) { LogHelper.logE(TAG, "showChangeNightModeAnim : createBitmap OOM!!!"); drawingCache = null; } if (drawingCache != null && !drawingCache.isRecycled()) { imageView.setImageBitmap(drawingCache); } container.destroyDrawingCache(); container.setDrawingCacheEnabled(false);// 以清空画图缓冲区,否则下一次还是原来的图像 imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); container.addView(imageView); ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, "alpha", imageView.getAlpha(), 0f); objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { imageView.setImageBitmap(null); container.removeView(imageView); } }); if (animatorListener != null) { objectAnimator.addListener(animatorListener); } objectAnimator.setDuration(Constant.CHANGE_NIGHT_ANIM_DURATION); objectAnimator.setInterpolator(new Interpolator() { @Override public float getInterpolation(float input) { return input * input * input; } }); objectAnimator.start();}
阅读全文
0 0
- 使用View 的setDrawingCacheEnabled获取整个activity的缓存快照,进行渐变动画
- View setDrawingCacheEnabled 缓存
- view 跨activity的动画
- 【Android】动画 —— view高度渐变的动画
- setDrawingCacheEnabled(boolean flag)的用法
- keep-alive的深入理解与使用(配合router-view缓存整个路由页面)
- 获取当前Activity的View
- 使用CAGradientLayer设置view的渐变效果
- android 实现View的背景色渐变动画
- WINFORM中几句程序获取整个屏幕的图片及当前窗口的图片快照
- 【截图】WINFORM中几句程序获取整个屏幕的图片及当前窗口的图片快照
- Android获取activity的所有子view(使用到递归)
- 动画的渐变效果
- View动画的简单使用
- Android动画-View动画的使用场景
- 获取activity下的所有view
- android 获取activity的根view
- android 获取activity的根view
- linux各硬件运行状态查看
- 设计模式简介
- Map集合
- String处理字符串的技巧
- redis:hash数据类型与操作
- 使用View 的setDrawingCacheEnabled获取整个activity的缓存快照,进行渐变动画
- 整体复制的unity工程在另一台电脑上打开,但mono无法调试的解决办法
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- proceXP
- MD5和SHA的不可逆加密算法样码
- 微信开放平台第三方应用发布时全网检测
- Maven整合Actitivi(5.18)流程设计器
- Coursera深度学习课程DeepLearning.ai 提炼笔记(1-3)-- 浅层神经网络
- c#开发一个“记事本”程序,要求能够实现文件的新建、打开、编辑、保存功能