本文使用Matrix实现Android实现图片缩放与旋转。示例代码如下:

packagecom.android.matrix;

importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Matrix;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.os.Bundle;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.ImageView.ScaleType;

/**
*Android实现图片缩放与旋转。
*@authorAdministrator
*
*/
publicclassMatixActivityextendsActivity{
publicvoidonCreate(Bundleicicle){

super.onCreate(icicle);

setTitle("Android实现图片缩放与旋转。");
LinearLayoutlinLayout=newLinearLayout(this);

//加载需要操作的图片,这里是一张图片
BitmapbitmapOrg=BitmapFactory.decodeResource(getResources(),R.drawable.r);

//获取这个图片的宽和高
intwidth=bitmapOrg.getWidth();
intheight=bitmapOrg.getHeight();

//定义预转换成的图片的宽度和高度
intnewWidth=200;
intnewHeight=200;

//计算缩放率,新尺寸除原始尺寸
floatscaleWidth=((float)newWidth)/width;
floatscaleHeight=((float)newHeight)/height;

//创建操作图片用的matrix对象
Matrixmatrix=newMatrix();

//缩放图片动作
matrix.postScale(scaleWidth,scaleHeight);

//旋转图片动作
matrix.postRotate(45);

//创建新的图片
BitmapresizedBitmap=Bitmap.createBitmap(bitmapOrg,0,0,
width,height,matrix,true);

//将上面创建的Bitmap转换成Drawable对象,使得其可以使用在ImageView,ImageButton中
BitmapDrawablebmd=newBitmapDrawable(resizedBitmap);

//创建一个ImageView
ImageViewimageView=newImageView(this);

//设置ImageView的图片为上面转换的图片
imageView.setImageDrawable(bmd);

//将图片居中显示
imageView.setScaleType(ScaleType.CENTER);

//将ImageView添加到布局模板中
linLayout.addView(imageView,
newLinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT
)
);

//设置为本activity的模板
setContentView(linLayout);
}

}


上例是静态地实现图片缩放,下例中可以通过鼠标滑轮和方向键实现图片动态的放大与缩小。

程序结构如下图:

Zoom.java文件中代码:

packagecom.android.zooming;

importandroid.view.View;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.drawable.Drawable;
importandroid.view.KeyEvent;

public classZoom extendsView{
privateDrawableimage;
private intzoomControler=20;

publicZoom(Contextcontext){
super(context);
image=context.getResources().getDrawable(R.drawable.x);
setFocusable( true);
}

@Override
protected voidonDraw(Canvascanvas){
// TODOAuto-generatedmethodstub
super.onDraw(canvas);
// 控制图像的宽度和高度
image.setBounds((getWidth()/2)-zoomControler,(getHeight()/2)-zoomControler,(getWidth()/2)+zoomControler,(getHeight()/2)+zoomControler);
image.draw(canvas);
}

@Override
public booleanonKeyDown( intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_DPAD_UP) // 放大
zoomControler+=10;

if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // 缩小
zoomControler-=10;

if(zoomControler<10)
zoomControler=10;

invalidate();
return true;
}

}


最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/02/11/2346273.html谢谢。

完毕。^_^

更多相关文章

  1. Android底部导航栏实现(三)之TextView+LinearLayout
  2. android
  3. 多线程实现更新android进度条。
  4. Android(安卓)4.0系统源码目录结构详解
  5. Android图标靠界面的右边的实现
  6. ImageView的属性android:scaleType
  7. Android(安卓)RecyclerView多个Item布局的实现(可实现头部底部)
  8. android 工程,点击图片,在屏幕显示
  9. 节操视频播放器

随机推荐

  1. 安卓开发中调用WebService实例
  2. android 优秀源码
  3. Android几种常见的多渠道(批量)打包方式
  4. Android中的广播机制(一)----- 接收广播
  5. 高德地图Android错误码1008、32和7;错误提
  6. 最近对招聘Android开发人员的一些思考
  7. android 蓝牙BLE 开发
  8. 雕刻机蓝牙android上位机控制器设计
  9. android基础部分再学习--AIDL
  10. Android百度地图开发之开发第一个小应用,