飞道的博客

55.模拟撕衣服游戏编辑图片

439人阅读  评论(0)

更换衣服游戏的原理:原本有2个图片,一个原图片,一个更被换了衣服以后的图片。两个图片放在一起,原图片放在上面,收滑动的时候上面图片的像素点设置成透明,下面的图片像素点显示出来了。

布局文件

activity_main.xml

 


  
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools= "http://schemas.android.com/tools"
  3. android:layout_width= "match_parent"
  4. android:layout_height= "match_parent"
  5. android:paddingBottom= "@dimen/activity_vertical_margin"
  6. android:paddingLeft= "@dimen/activity_horizontal_margin"
  7. android:paddingRight= "@dimen/activity_horizontal_margin"
  8. android:paddingTop= "@dimen/activity_vertical_margin"
  9. tools:context= ".MainActivity" >
  10. <ImageView
  11. android:layout_width= "wrap_content"
  12. android:layout_height= "wrap_content"
  13. android:src= "@drawable/xiatu" />
  14. <ImageView
  15. android:id= "@+id/iv"
  16. android:layout_width= "wrap_content"
  17. android:layout_height= "wrap_content"
  18. android:src= "@drawable/shangtu" />
  19. </RelativeLayout>


MainActivity.java

 

 


  
  1. package com.ldw.siyifu;
  2. import android.R.color;
  3. import android.app.Activity;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.graphics.Canvas;
  7. import android.graphics.Color;
  8. import android.graphics.Matrix;
  9. import android.graphics.Paint;
  10. import android.os.Bundle;
  11. import android.view.MotionEvent;
  12. import android.view.View;
  13. import android.view.View.OnTouchListener;
  14. import android.widget.ImageView;
  15. public class MainActivity extends Activity {
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. //获取到原图片
  21. Bitmap bitSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);
  22. //创建外衣副本
  23. final Bitmap bitCopy = Bitmap.createBitmap(bitSrc.getWidth(), bitSrc.getHeight(), bitSrc.getConfig());
  24. Paint paint = new Paint();
  25. Canvas canvas = new Canvas(bitCopy);
  26. canvas.drawBitmap(bitSrc, new Matrix(), paint);
  27. final ImageView iv = (ImageView) findViewById(R.id.iv);
  28. iv.setImageBitmap(bitCopy);
  29. iv.setOnTouchListener( new OnTouchListener(){
  30. @Override
  31. public boolean onTouch(View v, MotionEvent event) {
  32. int action = event.getAction();
  33. switch(action){
  34. //触摸屏幕
  35. case MotionEvent.ACTION_DOWN:
  36. break;
  37. //屏幕上移动
  38. case MotionEvent.ACTION_MOVE:
  39. int x = ( int) event.getX();
  40. int y = ( int) event.getY();
  41. //限制编辑的区域,在图片的区域内才允许编辑
  42. if(x <= bitCopy.getWidth() && y<= bitCopy.getHeight()){
  43. //隐藏不止一个像素点,把周围的像素点都隐藏
  44. for( int i = - 5; i <= 5; i++){
  45. for( int j = - 5; j <= 5; j++){
  46. //涂抹的像素点是一个圆形
  47. if( i*i + j*j <= 25){
  48. //防止越界,上下左右设置边界
  49. if( x + i < bitCopy.getWidth() && y + j < bitCopy.getHeight() && x + i > 0 && y + j > 0){
  50. //用户滑动过的坐标设置成透明
  51. bitCopy.setPixel(x + i , y + j, Color.TRANSPARENT);
  52. iv.setImageBitmap(bitCopy);
  53. }
  54. }
  55. }
  56. }
  57. }
  58. break;
  59. //离开屏幕
  60. case MotionEvent.ACTION_UP:
  61. break;
  62. }
  63. //true:告诉系统,这个事件由自己处理,
  64. //false:告诉系统,事件由自己处理,系统会把触摸事件发送到iamgeView的父节点
  65. return true;
  66. }
  67. });
  68. }
  69. }

 

 

 

 

 


转载:https://blog.csdn.net/augfun/article/details/55376670
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场