Bitmap操作图片之刮刮奖

2019-05-15  本文已影响0人  MengkZhang

刮刮奖又名撕开她的外衣小游戏,哈哈哈哈

原理:
创建一个原图的副本来操作图片(详解见上一篇博客创建一个原图的副本来操作图片

在ImageView的onTouch触摸事件中,记录手指滑动的开始坐标和结束坐标,在结束坐标处让Bitmap的副本变得透明,露出原图的Bitmap而已;并改变开始坐标和结束坐标

示例代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //用来显示 操作后的图片
        final ImageView iv = (ImageView) findViewById(R.id.iv);
        
        //[1]获取要操作图片 原图
        Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19);
        
        //[2]创建一个副本   相当于有一个和原图大小的白纸
        final Bitmap alterBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
        //创建画笔
        Paint paint = new Paint();
        //创建画布   把白纸铺到画布上
        Canvas canvas = new Canvas(alterBitmap);
        //开始作画 
        canvas.drawBitmap(srcBitmap, new Matrix(), paint);
        
        iv.setImageBitmap(alterBitmap);
        
        //[3]给vi设置一个触摸事件 
        iv.setOnTouchListener(new OnTouchListener() {
            
            public boolean onTouch(View v, MotionEvent event) {
                //[4]具体判断一下触摸事件 
                switch (event.getAction()) {
                
                case MotionEvent.ACTION_MOVE://移动事件
                    
                    for (int i = -7; i < 7; i++) { //增加X轴坐标
                        
                        for (int j = -7; j < 7; j++) {
                                                   //增加Y轴坐标
                            
                            //为了良好的用户体验  撕一个圆 
                            if (Math.sqrt(i*i+j*j)<7) {
                                
                                try {
                                    alterBitmap.setPixel((int)event.getX()+i, (int)event.getY()+j, Color.TRANSPARENT);
                                } catch (Exception e) {
                                }
                            }
                            
                        }
                    }
                    
                    //更新一下iv
                    iv.setImageBitmap(alterBitmap);
                    break;

                }
                
                return true;
            }
        });
        
        
        
        
        
    }

    

}

程序运行结果:


Demo源码:https://github.com/MengkZhang/guaguajiang

上一篇下一篇

猜你喜欢

热点阅读