本文使用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;
}

}


完毕。

更多相关文章

  1. android checkbox 定制(修改checkbox 的图片)
  2. android图像处理系列之三--图片色调饱和度、色相、亮度处理
  3. Android使用xml自定义图片
  4. android默认字体大小、高度、宽度
  5. 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
  6. Android中位图缩放
  7. android 获取图片
  8. android 读取,写入图片到sd卡源码
  9. Android 图片缩放

随机推荐

  1. mysql 5.7.21 winx64安装配置方法图文教
  2. mysql max 与 where 间的执行问题小结
  3. mysql5.7.21.zip安装教程
  4. mysql 查询当天、本周,本月,上一个月的数
  5. Linux连接mysql报错:Access denied for us
  6. Linux中安装MySql 5.7.21的详细操作步骤
  7. 分析MySQL复制以及调优原理和方法
  8. mysql按照天统计报表当天没有数据填0的实
  9. MySQL数据库的主从同步配置与读写分离
  10. Mysql实验之使用explain分析索引的走向