Android 图片缩放与旋转的实现详解
程序员文章站
2023-11-29 22:46:16
本文使用matrix实现android实现图片缩放与旋转。示例代码如下:复制代码 代码如下:package com.android.matrix;import androi...
本文使用matrix实现android实现图片缩放与旋转。示例代码如下:
package com.android.matrix;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.matrix;
import android.graphics.drawable.bitmapdrawable;
import android.os.bundle;
import android.view.viewgroup.layoutparams;
import android.widget.imageview;
import android.widget.linearlayout;
import android.widget.imageview.scaletype;
/**
* android实现图片缩放与旋转。
* @author administrator
*
*/
public class matixactivity extends activity {
public void oncreate(bundle icicle) {
super.oncreate(icicle);
settitle("android实现图片缩放与旋转。");
linearlayout linlayout = new linearlayout(this);
//加载需要操作的图片,这里是一张图片
bitmap bitmaporg = bitmapfactory.decoderesource(getresources(),r.drawable.r);
//获取这个图片的宽和高
int width = bitmaporg.getwidth();
int height = bitmaporg.getheight();
//定义预转换成的图片的宽度和高度
int newwidth = 200;
int newheight = 200;
//计算缩放率,新尺寸除原始尺寸
float scalewidth = ((float) newwidth) / width;
float scaleheight = ((float) newheight) / height;
// 创建操作图片用的matrix对象
matrix matrix = new matrix();
// 缩放图片动作
matrix.postscale(scalewidth, scaleheight);
//旋转图片 动作
matrix.postrotate(45);
// 创建新的图片
bitmap resizedbitmap = bitmap.createbitmap(bitmaporg, 0, 0,
width, height, matrix, true);
//将上面创建的bitmap转换成drawable对象,使得其可以使用在imageview, imagebutton中
bitmapdrawable bmd = new bitmapdrawable(resizedbitmap);
//创建一个imageview
imageview imageview = new imageview(this);
// 设置imageview的图片为上面转换的图片
imageview.setimagedrawable(bmd);
//将图片居中显示
imageview.setscaletype(scaletype.center);
//将imageview添加到布局模板中
linlayout.addview(imageview,
new linearlayout.layoutparams(
layoutparams.fill_parent, layoutparams.fill_parent
)
);
// 设置为本activity的模板
setcontentview(linlayout);
}
}
上例是静态地实现图片缩放,下例中可以通过鼠标滑轮和方向键实现图片动态的放大与缩小。
程序结构如下图:
zoom.java文件中代码:
package com.android.zooming;
import android.view.view;
import android.content.context;
import android.graphics.canvas;
import android.graphics.drawable.drawable;
import android.view.keyevent;
public class zoom extends view {
private drawable image;
private int zoomcontroler=20;
public zoom(context context){
super(context);
image=context.getresources().getdrawable(r.drawable.x);
setfocusable(true);
}
@override
protected void ondraw(canvas canvas) {
// todo auto-generated method stub
super.ondraw(canvas);
//控制图像的宽度和高度
image.setbounds((getwidth()/2)-zoomcontroler, (getheight()/2)-zoomcontroler, (getwidth()/2)+zoomcontroler, (getheight()/2)+zoomcontroler);
image.draw(canvas);
}
@override
public boolean onkeydown(int keycode, keyevent event) {
if(keycode==keyevent.keycode_dpad_up)//放大
zoomcontroler+=10;
if(keycode==keyevent.keycode_dpad_down) //缩小
zoomcontroler-=10;
if(zoomcontroler<10)
zoomcontroler=10;
invalidate();
return true;
}
}
复制代码 代码如下:
package com.android.matrix;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.matrix;
import android.graphics.drawable.bitmapdrawable;
import android.os.bundle;
import android.view.viewgroup.layoutparams;
import android.widget.imageview;
import android.widget.linearlayout;
import android.widget.imageview.scaletype;
/**
* android实现图片缩放与旋转。
* @author administrator
*
*/
public class matixactivity extends activity {
public void oncreate(bundle icicle) {
super.oncreate(icicle);
settitle("android实现图片缩放与旋转。");
linearlayout linlayout = new linearlayout(this);
//加载需要操作的图片,这里是一张图片
bitmap bitmaporg = bitmapfactory.decoderesource(getresources(),r.drawable.r);
//获取这个图片的宽和高
int width = bitmaporg.getwidth();
int height = bitmaporg.getheight();
//定义预转换成的图片的宽度和高度
int newwidth = 200;
int newheight = 200;
//计算缩放率,新尺寸除原始尺寸
float scalewidth = ((float) newwidth) / width;
float scaleheight = ((float) newheight) / height;
// 创建操作图片用的matrix对象
matrix matrix = new matrix();
// 缩放图片动作
matrix.postscale(scalewidth, scaleheight);
//旋转图片 动作
matrix.postrotate(45);
// 创建新的图片
bitmap resizedbitmap = bitmap.createbitmap(bitmaporg, 0, 0,
width, height, matrix, true);
//将上面创建的bitmap转换成drawable对象,使得其可以使用在imageview, imagebutton中
bitmapdrawable bmd = new bitmapdrawable(resizedbitmap);
//创建一个imageview
imageview imageview = new imageview(this);
// 设置imageview的图片为上面转换的图片
imageview.setimagedrawable(bmd);
//将图片居中显示
imageview.setscaletype(scaletype.center);
//将imageview添加到布局模板中
linlayout.addview(imageview,
new linearlayout.layoutparams(
layoutparams.fill_parent, layoutparams.fill_parent
)
);
// 设置为本activity的模板
setcontentview(linlayout);
}
}
上例是静态地实现图片缩放,下例中可以通过鼠标滑轮和方向键实现图片动态的放大与缩小。
程序结构如下图:
zoom.java文件中代码:
复制代码 代码如下:
package com.android.zooming;
import android.view.view;
import android.content.context;
import android.graphics.canvas;
import android.graphics.drawable.drawable;
import android.view.keyevent;
public class zoom extends view {
private drawable image;
private int zoomcontroler=20;
public zoom(context context){
super(context);
image=context.getresources().getdrawable(r.drawable.x);
setfocusable(true);
}
@override
protected void ondraw(canvas canvas) {
// todo auto-generated method stub
super.ondraw(canvas);
//控制图像的宽度和高度
image.setbounds((getwidth()/2)-zoomcontroler, (getheight()/2)-zoomcontroler, (getwidth()/2)+zoomcontroler, (getheight()/2)+zoomcontroler);
image.draw(canvas);
}
@override
public boolean onkeydown(int keycode, keyevent event) {
if(keycode==keyevent.keycode_dpad_up)//放大
zoomcontroler+=10;
if(keycode==keyevent.keycode_dpad_down) //缩小
zoomcontroler-=10;
if(zoomcontroler<10)
zoomcontroler=10;
invalidate();
return true;
}
}