【Android开发】刮刮乐|人生上上签Demo——带你脱非入欧

心得感悟

长这么大,就只中过瓜子再来一包的小奖,玩游戏从来都是非洲人,但是今天这个Demo可以让自己体验一把欧洲人的快乐![微笑中带着泪水.jpg]但是这个Demo是跟着老师写的,自已还不是很明白,有不对的地方后面会更改。


8.26
写完这篇文章的早上我真的抽到了闪卡,感动哭了!


内容简概

  • 一、前期图片准备
  • 二、编写代码
  • 三、运行效果
  • 四、程序运行结果分析

具体内容

一、前期图片准备

(1)找一张幸运彩票,或者游戏高配卡的图片
(2)再复制一份进行二次编辑,涂上刮刮乐专属颜色——灰色
(3)最后将其复制到app>res>drawable目录下

 大功告成☺☺☺☺!!!

二、编写代码

public class MainActivity extends AppCompatActivity {

    ImageView foreground;
    Bitmap orgBitmap;
    Bitmap copyBitmap;
    Canvas canvas;
    Paint paint;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 配置界面
        setContentView(R.layout.activity_main);

        // 找到容器视图里面的图片视图控件
        //findViewById
        foreground = findViewById(R.id.iv_foreground);

        // 将需要操作的图片读取出来 Bitmap
        // BitmapFactory 管理位图
        // decodeResource 从工程资源路径去生成一张位图
        // getResources获取工程资源
        // R.drawable.xiugai 访问资源路径下 drawable 里面的一个文件
        orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.xiugai);

        // 操作这张图片 用透明色替换
        // 不能操作原图 只能拷贝一份
        copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),orgBitmap.getConfig());

        // 创建一个Canvas 画布
        canvas = new Canvas(copyBitmap);

        // 创建一个画笔
        paint = new Paint();

        // 创建一个矩阵
        Matrix matrix = new Matrix();
        // 旋转图片
        // matrix.setRotate(90,240,400);

        // 平移
        // matrix.setTranslate(100,0);

        // 翻转 set作用一次 post作用多次
        // matrix.setScale(0.5f,1f);
        // matrix.postTranslate(orgBitmap.getWidth(),0);

        // 画一幅图
        canvas.drawBitmap(orgBitmap,matrix,paint);

        // 显示图片
        foreground.setImageBitmap(copyBitmap);

        // 给前景图片添加touch事件
        // 当有触摸事件发生 系统会监听并回调该事件
        foreground.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                // 获取当前事件
                int action = motionEvent.getAction();

                // 判断状态
                if (action == MotionEvent.ACTION_MOVE){
                    // 获取触摸点的坐标
                    int x = (int) motionEvent.getX();
                    int y = (int) motionEvent.getY();
                    for(int i = 0; i < 100;i++) {
                        for (int j = -20; j < 200; j++) {
                            copyBitmap.setPixel(x + i, y + j, Color.TRANSPARENT);
                        }
                    }
                    foreground.setImageBitmap(copyBitmap);
                }
                return true;
            }
        });
}




    

    

    
    


三、运行效果

【Android开发】刮刮乐|人生上上签Demo——带你脱非入欧_第1张图片

四、程序运行结果分析

1. 刮除不连贯
这是因为我们将motionEvent设置为int类型,导致其只能一个像素一个像素地刮除。
2. 手触摸屏幕的位置和刮除位置不一致
这是因为图片大小与手机界面不匹配,只要找一张与手机界面大小一致的图片就可以解决。
3. 中间平移等代码的理解
提供参考,有兴趣的朋友可以取消注释,自己感受一下这些功能。
4. 其他bug,比如有些图片用这个代码不能运行成功
具体原因我还不了解,水平有限,日后弄懂了定回来改正!!!

你可能感兴趣的:(【Android开发】刮刮乐|人生上上签Demo——带你脱非入欧)