`
helloandroid
  • 浏览: 272345 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:94494
社区版块
存档分类
最新评论

利用Camera实现图片叠加效果

阅读更多
先看看效果:


主要是利用了android.graphics.Camera类和android.graphics.Matrix还有处理View的onTouchEvent事件

 @Override
	protected void onDraw(Canvas canvas) {
		 super.onDraw(canvas);
		 transformationImage(canvas,list.size());
	}


private void transformationImage(Canvas canvas,int size){
		Paint paint = new Paint();
		//paint.setAlpha(230);
		paint.setAntiAlias(true);
		for(int i = 0 ;i<size;i++){
			mCamera.save();
				mCamera.translate((size-i)*10.0f, 0.0f,-60.0f*(size-i));
				mCamera.rotateY(-30.0f);
				mCamera.getMatrix(matrix);
				
				matrix.preScale((float)(i+1)/(float)(size), (float)(i+1)/(float)(size));
				matrix.preTranslate(-centerX, -centerY);
				matrix.postTranslate(centerX, centerY);
				canvas.drawBitmap(list.get((5-currentIndex+i)%5), matrix, paint);
			mCamera.restore();
		}
	}


 @Override
	 public boolean onTouchEvent(MotionEvent event) {
		 int x = (int) event.getX();
		 int y = (int) event.getY();
		 
		 int dx;
		 int dy;
		  
		  switch(event.getAction()) {
		  case MotionEvent.ACTION_DOWN:
			  mLastMotionX = x;
			  mLastMotionY = y;
			  break;
		  case MotionEvent.ACTION_MOVE:
			   dx = x - mLastMotionX;
			   dy = y - mLastMotionY;
			   mLastMotionX = x;
			   mLastMotionY = y;
			   if(dx<0&&Math.abs(dx)>30){
				   currentIndex--;
				   if(currentIndex<1){
					   currentIndex = 5;
				   }
			   }else if(dx>0&&Math.abs(dx)>30){
				   currentIndex++;
				   if(currentIndex>5){
					   currentIndex = 1;
				   }
			   }
			   break;
		  case MotionEvent.ACTION_UP:
			  break;
		  }
		 invalidate();
		 return true;
	 }
	 
	 @Override
	 public void dispatchDraw(Canvas canvas) {
		  super.dispatchDraw(canvas);
	 }

  • 大小: 74.8 KB
  • 大小: 53.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics