Android实现图片缩放与旋转

本文使用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. 那些年收藏的技术文章(一)-CSDN篇
  2. Android中ListView中显示图片和文本
  3. android EditText 实现搜索框点击搜索隐藏键盘
  4. Android(安卓)Service总结06 之AIDL
  5. Android关于图片压缩
  6. mono for android 获取手机照片或拍照并裁剪保存
  7. 在android中实现动态跑动的图表实现方法
  8. android button 上添加图片
  9. Android(安卓)9Patch图片

随机推荐

  1. Android之反编译
  2. Android(安卓)开发之 定时器 Handler + R
  3. android setting 設置<一>
  4. Android产生一个提示框
  5. Android5.0挂载子系统
  6. Phone双模修改涉及文件列表
  7. android百度地图 覆盖物弹出层效果
  8. android的UriMatcher类
  9. Android之Selector、Shape介绍
  10. Android(安卓)P WMS addwindow流程