项目简单介绍:

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

具体介绍:

用户启动项目后。载入一张图片,当用户点击图片的时候,点击的一片区域就会消失。从而显示出在这张图片以下的图片

这个小游戏相似与刮奖一样,刮开涂层就会显示文字。

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

该应用涉及到的知识有:

  • 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;
}
}); }
}

最后。部署后,随便点几下屏幕。效果就是这样:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY2NDI1NTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">

最新文章

  1. 深入理解CSS过渡transition
  2. Java_I/O输入输出_实现当用户输入姓名和密码时,将每一个姓名和密码加在文件中,如果用户输入done,就结束程序。
  3. Keychain group access
  4. Java-继承,多态练习0922-02
  5. localForage——轻松实现 Web 离线存储
  6. C#并发编程经典实例--笔记
  7. chrome浏览器插件启动本地应用程序
  8. [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
  9. 初次接触CodeSmith
  10. windows获取时间的方法
  11. 李洪强iOS开发之OC[014] -对象的存储细节
  12. jexus asp.net Linux Web Server
  13. 日志记录Filter
  14. elk集成安装配置
  15. 3893: [Usaco2014 Dec]Cow Jog
  16. SignalR的一点点东西
  17. 适合前端学习JS的网站
  18. Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法
  19. Python 事件驱动了解
  20. SkylineGlobe6.5版本,在矿山、石油、天然气等能源行业的最新应用DEMO演示

热门文章

  1. chown---改变某个文件或目录的所有者和所属的组
  2. rev---将文件中的每行内容以字符为单位反序输出
  3. iOS基本UI控件总结
  4. react-native-swiper苹果正常显示,Android不显示
  5. Mysql第八天 分区与分表
  6. 59.node的serve-favicon中间件的使用
  7. 2017国家集训队作业[agc014d]Black and White Tree
  8. 韦东山ARM裸机笔记(1)
  9. vsphere client和vsphere web client的区别
  10. CSDN的个人主页如何添加微信二维码