图片的旋转,移动,倒影,镜子效果
Matrix是一个矩阵
1 Matrix matrix=new Matrix(); 2 matrix.setValues(new float[]{ 3 2,0,0, 4 0,1,0, 5 0,0,1 6 }); 7 x=2x+0y+0z; 8 y=0x+1y+0z; 9 z=0x+0y+1z; //z越大离用户越远
算法不清楚的可以直接用代码操作
1 //matrix.setScale(sx, sy);
旋转的话也可以直接用代码
1 1 //matrix.setRotate(30);//旋转30度
可以通过画笔来取消锯齿,但是效果不是很好
1 Paint paint = new Paint(); 2 paint.setAntiAlias(true);//在算法上 取消锯齿
可以设置以什么位置进行旋转
1 //设置旋转 的横坐标以及纵坐标 2 // matrix.setRotate(30, bitmap.getWidth()/2, bitmap.getHeight()/2);
平移
1 //设置透明度 2 // matrix.setTranslate(30, 0);
倒影效果,镜子效果
1 //更改了y轴的值 这是左右 y轴的话 就改y的 2 matrix.setValues(new float[] { 3 -1, 0, 0, 4 0, 1, 0, 5 0, 0, 1 6 }); 7 //向下移动一个图片的高度 8 matrix.postTranslate(bitmap.getWidth(), 0);
如果要倒影只有一半 那么就设置新生成图片的一半,如果要更好一点可以加遮罩,等方法实现
全部代码如下:
1 package cn.itcast.bitmapcopy; 2 3 import java.io.FileNotFoundException; 4 5 import android.app.Activity; 6 import android.content.Intent; 7 import android.graphics.Bitmap; 8 import android.graphics.BitmapFactory; 9 import android.graphics.Canvas; 10 import android.graphics.Matrix; 11 import android.graphics.Paint; 12 import android.net.Uri; 13 import android.os.Bundle; 14 import android.view.View; 15 import android.widget.ImageView; 16 17 public class DemoActivity extends Activity { 18 private ImageView iv,iv_copy; 19 20 @Override 21 public void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.main); 24 iv = (ImageView) findViewById(R.id.iv); 25 iv_copy = (ImageView) findViewById(R.id.iv_copy); 26 27 } 28 29 30 public void selectImage(View view){ 31 Intent intent = new Intent(); 32 intent.setAction("android.intent.action.PICK"); 33 intent.addCategory("android.intent.category.DEFAULT"); 34 intent.setType("image/*"); 35 startActivityForResult(intent, 0); 36 } 37 38 39 @Override 40 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 41 try { 42 if (data != null) { 43 // 得到点击图片的uri 44 Uri uri = data.getData(); 45 //原图 46 Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); 47 iv.setImageBitmap(bitmap); 48 //原图的拷贝 49 Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight()-30, bitmap.getConfig()); 50 //以拷贝图片的为模板创建一个画布 51 Canvas canvas = new Canvas(alterBitmap); 52 Matrix matrix = new Matrix(); 53 /* matrix.setValues(new float[] { 54 2, 0, 0, 55 0, 2, 0, 56 0, 0, 1 57 });*/ 58 //matrix.setScale(sx, sy); 59 60 //matrix.setRotate(30);//旋转30度 61 62 //设置旋转 的横坐标以及纵坐标 63 // matrix.setRotate(30, bitmap.getWidth()/2, bitmap.getHeight()/2); 64 //设置透明度 65 // matrix.setTranslate(30, 0); 66 67 //更改了y轴的值 68 matrix.setValues(new float[] { 69 -1, 0, 0, 70 0, 1, 0, 71 0, 0, 1 72 }); 73 //向下移动一个图片的高度 74 matrix.postTranslate(bitmap.getWidth(), 0); 75 76 77 Paint paint = new Paint(); 78 paint.setAntiAlias(true);//在算法上 取消锯齿 79 canvas.drawBitmap(bitmap, matrix, paint); 80 iv_copy.setImageBitmap(alterBitmap); 81 } 82 } catch (FileNotFoundException e) { 83 e.printStackTrace(); 84 } 85 super.onActivityResult(requestCode, resultCode, data); 86 } 87 }