实现原理:

使用SurfaceView一直重绘实现该动画效果


先看效果图:

[置顶] android 幻灯片效果之平移_第1张图片


代码实现:

a,左边向右边平移

package com.open.turnpage;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PaintFlagsDrawFilter;import android.graphics.Rect;import android.view.SurfaceHolder;/** *  * @author yanglonghui * */public class TranslateLeft implements ITurnPage {private int duration=500;//动画持续时间private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);public TranslateLeft() {// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stub}@Overridepublic void onTurnPageDraw(SurfaceHolder holder, Bitmap[] bitmap,int maxWidth, int maxHeight) {int dx=(maxWidth-bitmap[1].getWidth())/2;int dy=(maxHeight-bitmap[1].getHeight())/2;int dx2=(maxWidth-bitmap[0].getWidth())/2;int dy2=(maxHeight-bitmap[0].getHeight())/2;long start=System.currentTimeMillis();long runMills=0;Rect src=new Rect();Canvas canvas=null;boolean isRunning=true;while(isRunning){isRunning=((runMills=(System.currentTimeMillis()-start))<duration);if(!isRunning){runMills=duration;}try {canvas=holder.lockCanvas(null);canvas.setDrawFilter(pdf);canvas.drawColor(Color.BLACK);// 清除画布canvas.drawBitmap(bitmap[1], dx, dy, null);canvas.save();canvas.translate(dx2, dy2);canvas.translate(-(int)(maxWidth*((float)runMills/(float)duration)), 0);src.set(0, 0, maxWidth, maxHeight);canvas.drawBitmap(bitmap[0], src, src, null);canvas.restore();} catch (Exception e) {e.printStackTrace();}finally{if(null!=canvas){holder.unlockCanvasAndPost(canvas);}else{break;}if(!isRunning){break;}}}}@Overridepublic void onDestory() {// TODO Auto-generated method stub}}

b,右边向左边平移

package com.open.turnpage;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PaintFlagsDrawFilter;import android.graphics.Rect;import android.view.SurfaceHolder;/** *  * @author yanglonghui * */public class TranslateRight implements ITurnPage {private int duration=500;//动画持续时间private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);public TranslateRight() {// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stub}@Overridepublic void onTurnPageDraw(SurfaceHolder holder, Bitmap[] bitmap,int maxWidth, int maxHeight) {int dx=(maxWidth-bitmap[0].getWidth())/2;int dy=(maxHeight-bitmap[0].getHeight())/2;int dx2=(maxWidth-bitmap[1].getWidth())/2;int dy2=(maxHeight-bitmap[1].getHeight())/2;long start=System.currentTimeMillis();long runMills=0;Rect src=new Rect();Canvas canvas=null;boolean isRunning=true;while(isRunning){isRunning=((runMills=(System.currentTimeMillis()-start))<duration);if(!isRunning){runMills=duration;}try {canvas=holder.lockCanvas(null);canvas.setDrawFilter(pdf);canvas.drawColor(Color.BLACK);// 清除画布canvas.drawBitmap(bitmap[0], dx, dy, null);canvas.save();canvas.translate(dx2, dy2);canvas.translate((int)(maxWidth*((float)runMills/(float)duration)), 0);src.set(0, 0, maxWidth, maxHeight);canvas.drawBitmap(bitmap[1], src, src, null);canvas.restore();} catch (Exception e) {e.printStackTrace();}finally{if(null!=canvas){holder.unlockCanvasAndPost(canvas);}else{break;}if(!isRunning){break;}}}}@Overridepublic void onDestory() {// TODO Auto-generated method stub}}



demo代码参见 csdn:http://download.csdn.net/detail/zz7zz7zz/6715605




更多相关文章

  1. Android应用libGDX引擎系列(一)-Android FrameWork 基于libGDX实
  2. Android修改系统闹铃的持续时间
  3. Android 动画——Layout Animations布局动画
  4. Android使用cocos2d做简单的平移动画
  5. Android属性动画优化
  6. android(3) 启动动画的渐变
  7. Android Activity页面跳转动画
  8. Android 判断动画结束

随机推荐

  1. 正确使用异步函数的姿势[每日前端夜话(0x
  2. 下一代原生应用开发框架来了:Google Flutt
  3. 盘一盘机器学习中的那些距离
  4. 世界顶级公司的前端面试都问些什么[每日
  5. 精通webpack的5大关键点
  6. 使用机器学习生成可维护的前端代码(附源
  7. 前端AI实战——告诉世界前端也能做AI
  8. 文末重磅福利|Python实现回归预测及模型优
  9. 使用 RAIL 模型评估前端性能 [每日前端夜
  10. RPA 2020.11 all in one 安装