`
byandby
  • 浏览: 1696554 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 图像旋转

阅读更多
       在Android中进行图像旋转需要使用Matrix,-->矩阵对象,它包含了一个3X3的矩阵,专门用于进行图像变换匹配。Matrix没有结构体,它必须被初始化,通过reset方法 和set 方法来实现。通过setRotate 设置旋转角度,用createBitmap创建一个经过旋转等处理的Bitmap对象,然后将Bitmap对象绘制到屏幕之上,于是就实现了旋转操作。  其实我们要实现一个位图的变化,旋转啊,缩放啊。 无非就有2中思路,一:将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样。二:就是在原有位图的基础上,缩放原位图,创建一个新的位图。下边 我们就看看这个图片旋转的例子吧。 可以通过手机 左右键来旋转图片。先看一下运行效果吧。






然后是我们的 Activity01类
package xiaohang.zhimeng;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

public class Activity01 extends Activity {

	private GameView mGameView = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mGameView = new GameView(this);

		setContentView(mGameView);
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		super.onKeyUp(keyCode, event);
		return true;
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (mGameView == null) {
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.finish();
			return true;
		}
		return mGameView.onKeyDown(keyCode, event);
	}
}


  下边是我们自己定义的View类 GameView
package xiaohang.zhimeng;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.View;

public class GameView extends View implements Runnable{


	//声明Bitmap对象
	Bitmap mBitQQ = null;
	int    BitQQwidth = 0;
	int    BitQQheight = 0;
	
	float	Angle = 0.0f;
	
	//构建Matrix对象
	Matrix mMatrix = new Matrix();
	public GameView(Context context) {
		super(context);
		
		//装载资源
		mBitQQ = ((BitmapDrawable)getResources().getDrawable(R.drawable.xh)).getBitmap();
		
		//得到图片的高度和宽度
		BitQQwidth = mBitQQ.getWidth();
		BitQQheight = mBitQQ.getHeight();
		
		//开启线程
		new Thread(this).start();
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//重置mMatrix对象
		mMatrix.reset();
		
		//设置旋转
		mMatrix.setRotate(Angle);
		
		//按mMatrix的旋转构建一个新的Bitmap  这里给大家说一下这个方法这几个参数 搞的我比较郁闷了
		/*第一个参数不说了
		 * 第二个 帮助文档翻译过来 是第一个像素源的 X坐标 我不知道是咋回事,如果哪位大哥知道还请给小弟留言
		 * 这里要提醒大家一下 就是 第二个参数 和第三个参数 0,0 这2个参数 必须 我写一个式子吧
		 * 0+mBitQQ.getWidt() <= Bitmap.width
		 * 0+mBitQQ.getHeight() <= Bitmap.height  大家仔细看看 所以这2个参数我觉得只能写0虽然我不知道
		 * 这2个参数到底用来决定什么。 如果大家谁知道 留言啊 谢谢。 如果不遵守那个式子就会有异常 大家可以看一看此方法的源码 或者自己试试
		 * 第三个参数和第二个表达意思一样
		 * 第四个参数可以理解为宽度
		 * 第五个参数可以理解为高度
		 * 第六个参数矩阵对象
		 * 第七个参数 我也不知道是干嘛的 但是 设置为true之后,图片的旋转的过程中 不会失真,就是字会看不清楚。
		 * 大家可以下载源码试试  这个参数 建议还是设置为true吧。
		 * */
		Bitmap mBitQQ2 = Bitmap.createBitmap(mBitQQ, 0, 0, BitQQwidth, BitQQheight, mMatrix, true);
		
		//绘制旋转后的图片
		GameView.drawImage(canvas, mBitQQ2, (320-BitQQwidth)/2, 10);
		
		mBitQQ2 = null;
	}
	
	//按键按下事件
	public boolean onKeyDown(int keyCode, KeyEvent event){
		//左方向键
		if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			Angle--;
		}else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
			Angle++;
		}
		return true;
	}
	
	//按键弹起事件
	public boolean onKeyUp(int keyCode, KeyEvent event){
		return true;
	}
	
	public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event){
		return true;
	}
	//线程处理
	public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			try {
				Thread.sleep(100);
			} catch (Exception e) {
				Thread.currentThread().interrupt();
			}
			postInvalidate();
		}
	}
	
	/**
	 * 绘制一个Bitmap
	 * @param	canvas	画布
	 * @param 	bitmap	图片
	 * @param	x		屏幕上的x坐标
	 * @param   y 		屏幕上的y坐标
	 * */
	public static void drawImage(Canvas canvas, Bitmap bitmap, int x ,int y){
		//绘制图像
		canvas.drawBitmap(bitmap, x, y, null);
	}
	
}


   大家如果感兴趣可以去附件下载源码。
  • 大小: 40.5 KB
  • 大小: 40.2 KB
  • 大小: 37.3 KB
7
0
分享到:
评论
4 楼 a379933101 2012-08-24  
菜鸟级别!
3 楼 byandby 2012-02-28  
huangying99899 写道
下到手机里面怎么不能翻转啊?

得按 方向键 左右啊。
2 楼 byandby 2011-11-07  
huangying99899 写道
下到手机里面怎么不能翻转啊?

我也 木有在手机里边 试过...
1 楼 huangying99899 2011-11-07  
下到手机里面怎么不能翻转啊?

相关推荐

    android 图片旋转

    在Android开发中,图片旋转是一项常见的操作,可以用于实现用户交互或者界面动态效果。本文将深入探讨如何使用`Matrix`和`RotateAnimation`来旋转图片,并允许用户输入自定义的角度。 首先,`Matrix`是Android图形...

    android图片旋转、控件旋转

    andriod旋转动画,支持view、图片旋转,调用方式已写好,包含旋转监听,非常方便的一款实用型andriod图片旋转动画

    android图片旋转、淡入淡出、缩放、移动效果

    以上代码演示了Android中实现图片旋转、淡入淡出、缩放和移动的基本方法。实际应用时,还可以结合使用这些动画,创建更复杂的组合动画,例如同时执行多个动画,或者设置动画监听器以在动画开始、结束或更新时执行...

    android 图片旋转 叠加 去黑边

    利用Canvas 的save,translate,rotate 相关方法,可以比较快速的实现图片旋转,且中心点不偏移。避免了使用Bitmap中setRotate中旋转覆盖且出现黑边的问题。可以直接下载使用自定义控件就可以了。

    Android实训-图片编辑工具(裁剪+旋转)

    在Android中,图片旋转通常通过`Matrix`类实现,它可以对图像进行各种几何变换。以下是图片旋转的基本步骤: 1. **获取Matrix对象**:创建一个新的`Matrix`实例,用于存储旋转操作。 2. **设定旋转中心**:确定旋转...

    android图片旋转、淡入淡出、缩放效果、移动效果示例.rar

    android图片旋转、淡入淡出、缩放效果、移动效果示例,先来看下截图的运行效果,单击对应的按钮,即可看到效果,淡入淡出之类的,图片旋转之类的。  图片旋转的代码如下:  rotateAnimation.setDuration(5000);  ...

    android3D旋转图片

    在Android开发中,3D旋转图片是一种常见的动画效果,可以为用户界面增添动态感和立体感。本实例主要探讨如何实现这一功能。Android 3D旋转通常涉及到Android的图形渲染和矩阵运算,其中Matrix类是核心工具。接下来,...

    android图片旋转

    在Android开发中,图片旋转是一项常见的操作,尤其在创建交互式应用时,用户可能需要通过手势来控制图像的视角变化,比如实现3D旋转效果。本文将深入探讨如何在Android中实现图片随手指动作的3D旋转,以及涉及到的...

    android-opengl图片3d旋转

    本文将深入探讨如何使用OpenGL ES在Android上实现图片的3D旋转。 首先,理解OpenGL ES的基本概念至关重要。OpenGL ES是OpenGL的一个子集,专为嵌入式系统设计,如智能手机和平板电脑。它提供了一个离散的图形编程...

    android图片的旋转(一分钟学会)

    在Android开发中,图片的旋转是一项常见的操作,无论是用户拍摄的照片需要调整角度,还是应用内显示的图片需要根据设备方向进行适配,都需要用到图片旋转的技术。本篇将深入探讨如何在Android中实现图片的旋转,并...

    Android开发之图片旋转功能实现方法【基于Matrix】

    本文实例讲述了Android开发之图片旋转功能实现方法。分享给大家供大家参考,具体如下: 在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配。Matrix ,中文里叫矩阵,高等...

    基于Android的OpenCV图像旋转操作的实现

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样...

    Android开发图片旋转的两种方式

    在Android开发中,图片旋转是常见的需求,例如用户拍照后可能需要调整图片方向,或者在应用内展示图片时根据需要进行动态旋转。本教程将详细讲解两种实现Android图片旋转的方法:动画(Animation)和Matrix变换。 ...

    android图片处理:让图片一直匀速旋转

    对于图片旋转,我们可以使用`ObjectAnimator`,它是属性动画的一种,可以直接作用于对象的属性。我们需要设置`ObjectAnimator`的目标属性为`rotation`,这代表图片的旋转角度。 2. **创建无限旋转动画**: 要实现...

    Android开发图片旋转和视频播放

    在Android应用开发中,处理图片旋转和视频播放是常见的需求,尤其对于那些涉及到多媒体功能的应用。下面我们将深入探讨这两个主题。 一、Android图片旋转 1. **获取图片原始角度**:图片在拍摄时可能带有旋转信息...

    android 关于图像旋转变换的解释

    ### Android 图像旋转变换详解 #### 一、引言 在Android开发中,图形变换是一种常见的需求,尤其是在处理图像的动态效果时。本文将深入探讨Android中的图像旋转变换,包括旋转的基本原理、实现方式以及相关的...

    安卓图片轮播广告轮播自动滚屏相关-android之旋转罗盘风车开发Android随手指旋转图片.rar

    4. **旋转罗盘/风车效果**:这种效果的实现通常需要对图片进行旋转处理,可以使用Matrix对象来操作图像的坐标系,实现旋转。同时,为了达到风车般连续旋转的效果,可能还需要利用到自定义View或者SurfaceView,实现...

    Android-CarouselEffectViewPager的旋转木马效果

    "Android-CarouselEffectViewPager"是一个专门为Android平台设计的库,它允许开发者实现类似旋转木马的滑动浏览效果,通常用于展示图片、广告轮播或内容卡片。这个库基于Android的`ViewPager`组件,通过自定义适配器...

    Android-3D自动旋转的旋转木马

    在Android应用开发中,"Android-3D自动旋转的旋转木马"是一个独特且吸引人的交互元素,通常用于展示一系列图像或卡片,就像真实的旋转木马一样,以3D效果自动旋转。这种控件可以增强用户体验,使得应用程序更加生动...

Global site tag (gtag.js) - Google Analytics