圖片的旋轉,移動,倒影,鏡子效果
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 }

浙公網安備 33010602011771號