图片的拷贝与放大缩小、旋转、色彩,撕衣服

对图片的复制操作:动画是对当前图片进行操作,这里是复制一张图片出来,对复制的图片进行操作

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>

 

posted @ 2016-06-01 19:04  ts-android  阅读(559)  评论(0编辑  收藏  举报