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

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

     } 

}

时间: 2024-08-01 05:57:00

Android 图片缩放与旋转的实现详解的相关文章

Android 图片处理避免出现oom的方法详解

1. 通过设置采样率压缩 res资源图片压缩 decodeResource public Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new Bi

Android 图片缩放实例详解_Android

本文实现Android中的图片的缩放效果 首先设计布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_par

动画-关于android图片缩放的问题

问题描述 关于android图片缩放的问题 我有一张很大的图片,比如说它的分辨率为960*800(宽和高),而手机的分辨率为480*800(宽和高),刚开始的时候图片放在一个imageview中,它的scaleType为center,如果我想通过动画的形式把这个图片的scaleType设为fitcenter,动画效果要求:图片本身不动,慢慢从四周缩小到fitcenter的比例形式. 解决方案 自己做个View/ImageView,然后override onDraw.

Android编程实现自定义手势的方法详解_Android

本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何对其进行管理. 先介绍一下Android系统对手势的管理,Android系统允许应用程序把用户的手势以文件的形式保存以前,以后要使用这些手势只需要加载这个手势库文件即可,同时Android系统还提供了诸如手势识别.查找及删除等的函数接口,具体如下: 一.加载手势库文件: staticGestureL

Android开发之Animations动画用法实例详解_Android

本文实例讲述了Android开发之Animations动画用法.分享给大家供大家参考,具体如下: 一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java Code代码中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸

Android中asset和raw的区别详解_Android

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到 R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 *读取文件资源

无惊喜有改变 Android 4.1.2系统更新内容详解

Android 4.1.2系统更新内容详解(1)本周谷歌刚刚发布了最新版本的Android 4.1.2系统,我们也在第一时间上手试用并为大家带来了这篇介绍文章.如果你想要知道4.1.2中的新变化那你来对地方了.说实话其实可供介绍的方面并不多,从版本号上仅0.0.1的的变化就可以看出这次并不是一次重大更新.不过我依然仔细遍历了所有164个系统软件,下面就是所有能为大家介绍的内容.首先,可能大家也都听说过了,就是单手指通知栏展开以及终于学会了旋转的桌面.至于那些有关bug修复的更新内容我就无法测试了

Android中asset和raw的区别详解

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到 R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 *读取文件资源

Android Fragment滑动组件ViewPager的实例详解

Android Fragment滑动组件ViewPager的实例详解 1适配器FragmentPagerAdapter的实现 对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了. public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyFragmentPagerAdapter