图片的拷贝与放大缩小、旋转、色彩,撕衣服
对图片的复制操作:动画是对当前图片进行操作,这里是复制一张图片出来,对复制的图片进行操作
import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.opengl.Visibility; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; //功能:图片的拷贝 public class MainActivity2 extends Activity { private Bitmap bitmap;//可修改的空白图形 private Bitmap bm;//被复制的位图 private ImageView iv_copy; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity2); ImageView iv=(ImageView) findViewById(R.id.iv); iv_copy = (ImageView) findViewById(R.id.iv_copy); //给第一个imageView默认设置一个位图(不可修改) bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); iv.setImageBitmap(bm); //1.创建一个副本和指定的位图一模一样的大小和配置的空白的图形(可修改) bitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig()); } //按钮的单击事件(拷贝一个位图) public void click(View view){ //2.准备一个画板,在画板上放上准备好的空白位图 Canvas canvas=new Canvas(bitmap); //3.准备一个画笔 Paint paint=new Paint(); //paint.setColor(Color.BLACK); //4.在画板上的空白位图上画画 Matrix matrix=new Matrix();//矩阵:代表按原图缩放,相当于下面这条代码 matrix.setScale(1.0f, 1.0f);//代表缩放比例,注意前面的空白位图的宽度和长度的设定 canvas.drawBitmap(bm, matrix, paint);//第一个参数代表参照bm这个位图画 //5.空白位图已经画好,就设置到imageView上显示 iv_copy.setImageBitmap(bitmap); } }
对图片的放大与缩小(注意这不是在原图上进行修改,而是复制一张图片出来来进行缩放操作) 与上面的代码不同的地方如下:
//1.上面的是创建一个长宽一样的空白位图,这里将空白位图的长宽扩大了两倍 bitmap = Bitmap.createBitmap(2*bm.getWidth(), 2*bm.getHeight(), bm.getConfig()); Matrix matrix=new Matrix();//矩阵:代表按原图缩放 matrix.setScale(2.0f, 2.0f);//代表缩放比例,这里将长宽都扩大为原来的两倍
效果如下:
第二种缩放方式:
/** * 以scaleSize为比例,等比例缩放图片,这样imageView的单击事件任然会有效,所以不利于频繁缩放的场景 */ private void scaleBitmap(float scaleSize) { Matrix matrix = new Matrix(); matrix.setScale(scaleSize,scaleSize);//X与Y轴的缩放比例 /* Bitmap bitmapSrc,需要缩放的bitmap的源 int x,y 从需要缩放的bitmap图片的这个坐标开始 (0,0)也就是代表从bitmap的左上方 int width,height X,Y轴的长度 下面对应的这4个参数也就是说:缩放bitmapSrc的整个范围 Matrix m, 矩阵图 boolean filter 表示是否过滤, true表示过滤,图片会优化处理*/ Bitmap bitmap = Bitmap.createBitmap(bitmapSrc, 0, 0, bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true); //将缩放的图片设置到imageView上 imageView.setImageBitmap(bitmap); }
对图片的旋转:也不是对原图进行修改 只需要对第一个代码进行如下修改
//表示以bitmap这个图的中心为圆心进行180度的旋转 matrix.setRotate(180, bitmap.getWidth()/2, bitmap.getHeight()/2);
镜面效果:在第一个代码的基础上进行如下修改
Matrix matrix=new Matrix();//矩阵:代表按原图缩放 //镜面效果:将X轴坐标变为负的,然后移动一个图片的宽的长度 matrix.setScale(-1.0f,1.0f); matrix.postTranslate(bitmap.getWidth(), 0);
对复制的图片进行颜色的改变:
Matrix matrix=new Matrix();//矩阵:代表按原图缩放 ColorMatrix cm = new ColorMatrix(); cm.set(new float[] { 0.5f, 0, 0, 0, 0, //代表红色的值 0, 0.8f, 0, 0, 0, //代表绿色的值 0, 0, 0.6f, 0, 0, //代表蓝色的值 0, 0, 0, 1, 0 }); paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(bm, matrix, paint);//第一个参数代表参照bm这个位图画
图片的透明度设置:类似与撕衣服:
//功能:扒衣服 public class MainActivity extends Activity { private Bitmap bitmap;//可修改的位图 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView iv=(ImageView) findViewById(R.id.iv); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre); //创建一个空白的位图的拷贝 final Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); Canvas canvas=new Canvas(alterBitmap); Paint paint=new Paint(); Matrix matrix=new Matrix(); canvas.drawBitmap(bitmap, matrix, paint);//画出图片 iv.setImageBitmap(alterBitmap); //图片的触摸事件 iv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://按下 break; case MotionEvent.ACTION_MOVE://移动 int x = (int) event.getX(); int y = (int) event.getY(); //需要把XY的位置设置为透明,这里将点击的这个位置的周围的6个像素点的位置都设为透明 for(int i=-6;i<7;i++){ for(int j=-6;j<7;j++){ try { alterBitmap.setPixel(x+i, y+j, Color.TRANSPARENT);//透明 System.out.println(x+i+"--"+y+j); } catch (Exception e) { e.printStackTrace(); } } } iv.setImageBitmap(alterBitmap); break; case MotionEvent.ACTION_UP://手指离开屏幕 //播放音频 MediaPlayer.create(getApplicationContext(), R.raw.higirl).start(); break; } return true;//代表这次事件处理完了 } }); } }
mp3文件放在 res文件-->raw文件-->higirl.mp3
布局文件:
<RelativeLayout 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_parent" tools:context="com.example.ts.image.MainActivity" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/after" android:id="@+id/iv_after"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/pre" android:id="@+id/iv"/> </RelativeLayout>