美文网首页
Bitmap操作图片之刮刮奖

Bitmap操作图片之刮刮奖

作者: MengkZhang | 来源:发表于2019-05-15 20:42 被阅读0次

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

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

    在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

    相关文章

      网友评论

          本文标题:Bitmap操作图片之刮刮奖

          本文链接:https://www.haomeiwen.com/subject/zpgmaqtx.html