[1]旋转
public class MainActivity extends Activity { private float degrees;// 图片旋转的角度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //[1]找到我们关心的控件 ImageView iv_src = (ImageView) findViewById(R.id.iv_src); final ImageView iv_copy = (ImageView) findViewById(R.id.iv_copy); //[2] 把tomcat.png 转换成bitmap 然后显示到iv_src final Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tomcat); //[2.1 test] 修改原图 原图不可以被修改 //srcBitmap.setPixel(20, 30, Color.RED); iv_src.setImageBitmap(srcBitmap); new Thread(){public void run() { for (int i = 0; i < 100; i++) { degrees += 5; //[3]拷贝原图 //[3.1]创建模板 final Bitmap copybitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig()); //[3.2]想作画 需要一个画布 以copybitmap为模板 Canvas canvas = new Canvas(copybitmap); //[3.3]创建一个画笔 Paint paint = new Paint(); //[3.4]开始作画 srcBitmap参考原图去画 Matrix matrix = new Matrix(); //[3.5]对图片进行旋转 matrix.setRotate(degrees, srcBitmap.getWidth()/2, srcBitmap.getHeight()/2); canvas.drawBitmap(srcBitmap,matrix, paint); //☆ 注意不能在子线程更新ui runOnUiThread(new Runnable() { public void run() { //这个方法里面的逻辑一定是在主线程执行 //[4]把copybitmap显示到iv_copy上 iv_copy.setImageBitmap(copybitmap); } }); SystemClock.sleep(1000); } };}.start(); } }
[2]缩放
matrix.setScale(0.5f, 0.5f);
[3]位移
matrix.setTranslate(20, 0);
[4]倒影效果
// [3.5]对图片缩放处理 matrix.setScale(1.0f, -1.0f); //让图片进行移动 //matrix.setTranslate(0, srcBitmap.getHeight()); //post是在上一次修改的基础上进行修改 set每次每次都是新的变化 会覆盖上一次修改 matrix.postTranslate(0, srcBitmap.getHeight());
[5]镜面效果
//[3.6]镜面效果 matrix.setScale(-1.0f, 1.0f); matrix.postTranslate(srcBitmap.getWidth(), 0);