android 图片管理器 位移,Android图片旋转,缩放,位移,倾斜,对称完整示例(二)——Bitmap.createBitmap()和Matrix...

package cc.c;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.Matrix;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.widget.ImageView;

/**

* Demo描述:

* 利用Bitmap.createBitmap()和Matrix实现图像

* 的旋转,缩放,位移,倾斜.

* 该方式的作用和mImageView.setImageMatrix(matrix);

* 是一样的

*

* 备注说明:

* 利用Bitmap.createBitmap()和Matrix的方式没有实现图像

* 关于X轴,Y轴和XY的对称.

* 明白怎么实现的coder请指点,多谢.

*

*/

public class MainActivity extends Activity {

private Bitmap mBitmap;

private Bitmap mNewBitmap;

private ImageView mImageView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

init();

}

private void init(){

mImageView=(ImageView) findViewById(R.id.imageView);

mImageView.setScaleType(ImageView.ScaleType.MATRIX);

BitmapDrawable bitmapDrawable=(BitmapDrawable) mImageView.getDrawable();

mBitmap=bitmapDrawable.getBitmap();

//平移的两种方式,效果一致

//testTranslate1(mBitmap);

testTranslate2(mBitmap);

//围绕图片中心点旋转且位移的两种方式,效果一致

//testRotate1(mBitmap);

//testRotate2(mBitmap);

//围绕原点旋转后平移的两种方式,效果一致

//testRotateAndTranslate1(mBitmap);

//testRotateAndTranslate2(mBitmap);

//测试缩放的两种方式,效果一致

//testScale1();

//testScale2(mBitmap);

//测试倾斜各两种方式,效果一致

//testSkewX1();

//testSkewX2(mBitmap);

//testSkewY1();

//testSkewY2(mBitmap);

//testSkewXY1();

//testSkewXY2(mBitmap);

//测试对称

//testSymmetryX(mBitmap);

//testSymmetryY(mBitmap);

//testSymmetryXY(mBitmap);

}

//平移的方式一

private void testTranslate1(Bitmap bitmap){

Matrix matrix=new Matrix();

int width=bitmap.getWidth();

int height=bitmap.getHeight();

matrix.postTranslate(width, height);

mImageView.setImageMatrix(matrix);

}

//平移的方式二

private void testTranslate2(Bitmap bitmap){

Matrix matrix=mImageView.getImageMatrix();

int width=bitmap.getWidth();

int height=bitmap.getHeight();

matrix.postTranslate(width, height);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

//围绕图片中心点旋转且位移的方式一

private void testRotate1(Bitmap bitmap){

Matrix matrix=new Matrix();

int width=bitmap.getWidth();

int height=bitmap.getHeight();

matrix.postRotate(45f, width/2, height/2);

matrix.postTranslate(width, height);

mImageView.setImageMatrix(matrix);

}

//围绕图片中心点旋转且位移的方式二

//注意问题:

//在方式一种旋转45°采用matrix.postRotate(45f, width/2, height/2);即可

//但在方式二中只需旋转22.5度matrix.postRotate(45/2f, width/2, height/2);

private void testRotate2(Bitmap bitmap){

Matrix matrix=mImageView.getImageMatrix();

int width=bitmap.getWidth();

int height=bitmap.getHeight();

matrix.postRotate(45/2f, width/2, height/2);

matrix.postTranslate(width, height);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

//围绕原点旋转后平移的方式一

private void testRotateAndTranslate1(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setRotate(45f);

matrix.postTranslate(width, height);

mImageView.setImageMatrix(matrix);

}

//围绕原点旋转后平移的方式二

//注意问题:

//同上

private void testRotateAndTranslate2(Bitmap bitmap) {

Matrix matrix = mImageView.getImageMatrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setRotate(45/2f);

matrix.postTranslate(width, height);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

//缩放的方式一

private void testScale1() {

Matrix matrix = new Matrix();

matrix.setScale(0.5f, 0.5f);

mImageView.setImageMatrix(matrix);

}

//缩放的方式二

private void testScale2(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setScale(0.5f, 0.5f);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

//水平倾斜的方式一

private void testSkewX1() {

Matrix matrix = new Matrix();

matrix.setSkew(0.5f, 0);

mImageView.setImageMatrix(matrix);

}

//水平倾斜的方式二

private void testSkewX2(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setSkew(0.5f, 0);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

// 垂直倾斜的方式一

private void testSkewY1() {

Matrix matrix = new Matrix();

matrix.setSkew(0, 0.5f);

mImageView.setImageMatrix(matrix);

}

// 垂直倾斜的方式二

private void testSkewY2(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setSkew(0, 0.5f);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

// 水平且垂直倾斜的方式一

private void testSkewXY1() {

Matrix matrix = new Matrix();

matrix.setSkew(0.5f, 0.5f);

mImageView.setImageMatrix(matrix);

}

// 水平且垂直倾斜的方式二

private void testSkewXY2(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width =bitmap.getWidth();

int height = bitmap.getHeight();

matrix.setSkew(0.5f, 0.5f);

mNewBitmap=Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false);

mImageView.setImageBitmap(mNewBitmap);

}

// 水平对称--图片关于X轴对称

private void testSymmetryX(Bitmap bitmap) {

Matrix matrix = new Matrix();

int height =bitmap.getHeight();

float matrixValues[] = { 1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, 1f };

matrix.setValues(matrixValues);

//若是matrix.postTranslate(0, height);//表示将图片上下倒置

matrix.postTranslate(0, height*2);

mImageView.setImageMatrix(matrix);

}

// 垂直对称--图片关于Y轴对

private void testSymmetryY(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width=bitmap.getWidth();

float matrixValues[] = {-1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 1f};

matrix.setValues(matrixValues);

//若是matrix.postTranslate(width,0);//表示将图片左右倒置

matrix.postTranslate(width*2, 0);

mImageView.setImageMatrix(matrix);

}

// 关于X=Y对称

private void testSymmetryXY(Bitmap bitmap) {

Matrix matrix = new Matrix();

int width = bitmap.getWidth();

int height = bitmap.getHeight();

float matrixValues[] = { 0f, -1f, 0f, -1f, 0f, 0f, 0f, 0f, 1f };

matrix.setValues(matrixValues);

matrix.postTranslate(width+height, width+height);

mImageView.setImageMatrix(matrix);

}

}

main.xml如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/imageView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:src="@drawable/a"

/>

原文:http://blog.csdn.net/lfdfhl/article/details/28473065

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值