废话不多说先粘贴代码 下边这段代码是在按钮的点击事件里面写的:
// 开启图片的缓存功能 mGuidePager.setDrawingCacheEnabled(true); // 设置图片的质量 mGuidePager.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); // 获取Bitmap Bitmap drawingCache = mGuidePager.getDrawingCache(); // 获取上边的一半赋值给上边的ImageView Bitmap topBitmap = getTopBitmap(drawingCache); mTopImg.setImageBitmap(topBitmap); // 获取下边的一半赋值给下边的ImageView Bitmap bottomBitmap = getBottomBitmap(drawingCache); mBottomImg.setImageBitmap(bottomBitmap); // 开启动画 startAnim();
接下来是获取上下两部分的截图的代码 是本次事例的关键所在:
private Bitmap getTopBitmap(Bitmap drawingCache) { int height = drawingCache.getHeight() / 2; int width = drawingCache.getWidth(); Bitmap.Config config = drawingCache.getConfig(); Bitmap topBitmap = Bitmap.createBitmap(width, height, config); Canvas canvas = new Canvas(topBitmap); Matrix matrix = new Matrix(); Paint paint = new Paint(); //将图赋值到画布上 canvas.drawBitmap(drawingCache, matrix, paint); return topBitmap; }
private Bitmap getBottomBitmap(Bitmap drawingCache) { int height = drawingCache.getHeight() / 2; int width = drawingCache.getWidth(); Bitmap.Config config = drawingCache.getConfig(); Bitmap bottomBitmap = Bitmap.createBitmap(width, height, config); Canvas canvas = new Canvas(bottomBitmap); Matrix matrix = new Matrix(); //原图向上移动宽度的一半 让下边的一半可以画到画布上 matrix.setTranslate(0, -height); Paint paint = new Paint(); canvas.drawBitmap(drawingCache, matrix, paint); return bottomBitmap; }
再接下来是动画的代码 小意思了:
private void startAnim() { mGuidePager.setVisibility(View.INVISIBLE); mAllAnim.setVisibility(View.VISIBLE); //添加动画到集合中 AnimationSet as1 = new AnimationSet(false); TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, -mTopImg.getHeight()); AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f); as1.addAnimation(translateAnimation); as1.addAnimation(alphaAnimation); as1.setDuration(1000); mTopImg.startAnimation(as1); TranslateAnimation translateAnimation1 = new TranslateAnimation(0, 0, 0, mBottomImg.getHeight()); AlphaAnimation alphaAnimation1 = new AlphaAnimation(1.0f, 0.0f); AnimationSet animationSet = new AnimationSet(false); animationSet.addAnimation(translateAnimation1); animationSet.addAnimation(alphaAnimation1); animationSet.setDuration(1000); mBottomImg.setAnimation(animationSet); }
总结一下:
在这里给大家讲一下实现原理: 首先我们应该找到要获取截图的控件 我的事例中找的是一个ViewPager 他们的父布局最好是FrameLayout或者RelativeLayout 然后创建一个LinearLauout布局 覆盖在要获取截图的控件上方 然后在这个布局中添加两个ImageView,接下来在代码中将获取的两部分的截图分别赋值给这两个ImageView 并且分别为他俩添加动画即可。具体实现参见代码。