zoukankan      html  css  js  c++  java
  • Android 撕衣服(刮刮乐游戏)

    项目简单介绍:

      该项目为撕衣服,相似刮刮乐游戏

    具体介绍:

    用户启动项目后。载入一张图片,当用户点击图片的时候,点击的一片区域就会消失。从而显示出在这张图片以下的图片
    这个小游戏相似与刮奖一样,刮开涂层就会显示文字。


    这里则是撕掉美女身上的衣服,漏出里面的图片。

    该应用涉及到的知识有:

    • 1.怎样实现绘图功能
    • 2.怎样把像素点变为透明色
    • 3.怎样监听手机对屏幕的操作
         主要有触击,滑动。离开三种情况

    注意:

    • 1.一定要注意在设置像素点的时候,范围不能超过当前控件的范围
    • 2.设置ImageView最好设置为wrap_content,假设设置为match_parent。可能导致图片旁边留白。影响定位
        比如:假设图片宽距离ImageView组件为20dp(即图片两遍的留白为20dp),当手指移动到(36,0)位置时候。依据该题代码。能够计算出:
        实际上是把以(16,0)为圆心,半径为8的圆形区域的像素点颜色变为透明色,而不是(36,0)附近

    步骤:

    1.创建一个android的项目。编写activity_main.xml文件的代码:

    <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"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="hhh.exercise.smultimedia_d.MainActivity" >
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/aneiyi" />
    
        <ImageView
            android:id="@+id/iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </RelativeLayout>

    这里实际上就是创建两个ImageView控件,而且两个控件重叠在一起,界面例如以下所看到的:

    这里写图片描写叙述

    2.编写MainActivity代码:

    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.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
        private ImageView iv;
        private Bitmap bmCopy;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            iv = (ImageView) findViewById(R.id.iv);
    
            // 创建仅仅读的Bitmap对象
            Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);
    
    
            bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    
            // 创建Paint对象
            Paint paint = new Paint();
    
            // 创建Canvas对象
            Canvas canvas = new Canvas(bmCopy);
    
            // 開始绘画
            canvas.drawBitmap(bmSrc, new Matrix(), paint);
    
            // 载入最外层图片
            iv.setImageBitmap(bmCopy);
    
            // 设置触摸侦听
            iv.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
    
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE:
    
                        // 获取当前手指所在的坐标
                        int x = (int) event.getX();
                        int y = (int) event.getY();
    
                        // 取当前坐标的一片区域(这里以点钱坐标为原点,半径为5的做一个圆形区域)
                        int r = 8;
                        for (int i = -r; i <= r; i++) {
                            for (int j = -r; j <= r; j++) {
                                if (Math.sqrt(i*i+ j*j) <= r) {
    
                                    // 推断当前区域的点是否在ImageView控件范围内,在就运行以下操作。不在就什么也不做
                                    if (x + i < bmCopy.getWidth() && x + i > 0 && y + j < bmCopy.getHeight() && y + j > 0) {
    
                                        // 把用户划过的坐标点的像素设为透明色
                                        bmCopy.setPixel(x + i, y + j, Color.TRANSPARENT);
    
                                        // 将图片显示在界面上
                                        iv.setImageBitmap(bmCopy);
    
                                    }
                                }
                            }
                        }
                    }
                    return true;
                }
            });
    
        }
    }
    

    最后。部署后,随便点几下屏幕。效果就是这样:
    这里写图片描写叙述

  • 相关阅读:
    学生信息表
    水仙花数
    DirectAccess完整配置
    这些惹人嫌系统安装方法
    求解方程式
    AD DS的维护之备份还原
    简单的switch语句
    linux_常用命令
    小小问题
    frameset和frame
  • 原文地址:https://www.cnblogs.com/llguanli/p/8329367.html
Copyright © 2011-2022 走看看