[置顶] android 幻灯片效果之平移
16lz
2021-01-23
实现原理:
使用SurfaceView一直重绘实现该动画效果
先看效果图:
代码实现:
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
更多相关文章
- Android应用libGDX引擎系列(一)-Android FrameWork 基于libGDX实
- Android修改系统闹铃的持续时间
- Android 动画——Layout Animations布局动画
- Android使用cocos2d做简单的平移动画
- Android属性动画优化
- android(3) 启动动画的渐变
- Android Activity页面跳转动画
- Android 判断动画结束