欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 图片缩放与旋转的实现详解

程序员文章站 2023-01-02 08:35:34
本文使用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);
     } 
}

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

Android 图片缩放与旋转的实现详解

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; 
     } 
}