• Android简易实战教程--第三十话《撕衣美女》


    此篇邪恶一些,给单身屌丝发点“福利”,通过图片的绘制,给美女脱掉衣服。

    原理:图片覆盖图片,通过画笔对顶端的图片做一些特效处理,即手指触摸的地方,设置为透明。即可显示最底部的美女图片。

    布局:一张内衣,一张外衣

    <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=".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"
            android:src="@drawable/awaiyi" 
            />
    
    </RelativeLayout>

    代码如下:

    package com.itandroid.syf;
    
    import android.os.Bundle;
    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.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
    	private Bitmap bmCopy;
    	private ImageView iv;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);
    		
    		// 1.创建一个与原图一模一样大小的bitmap对象
    		bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    
    		// 2.创建画笔对象
    		Paint paint = new Paint();
    		// 3.创建画板对象
    		Canvas canvas = new Canvas(bmCopy);
    		// 4.开始作画
    		canvas.drawBitmap(bmSrc, new Matrix(), paint);
    		
    		iv = (ImageView) findViewById(R.id.iv);
    		
    		//添加图片触摸事件
    		iv.setOnTouchListener(new OnTouchListener() {
    			
    			@Override
    			public boolean onTouch(View v, MotionEvent event) {
    				switch (event.getAction()) {
    				case MotionEvent.ACTION_MOVE:
    					//获取x和y的坐标
    					int x = (int) event.getX();
    					int y = (int) event.getY();
    					//算法
    					for(int i = -5; i <= 5; i++){//扩大坐标点的范围
    						for(int j = -5; j <= 5; j++){
    							//把用户划过的坐标置为透明色
    							//改变指定的像素颜色
    							if(Math.sqrt(i*i + j*j) <= 5){
    								//防止角标越界
    								if(x + i < bmCopy.getWidth() && y + j < bmCopy.getHeight() && x + i >= 0 && y + j >= 0){
    									//直接指定x和y的坐标置为第三个参数的颜色。即透明色
    									bmCopy.setPixel(x + i, y + j, Color.TRANSPARENT);
    									// 绘制后,再次设置最新的图片情况,刷新显示。
    									iv.setImageBitmap(bmCopy);
    								}
    							}
    						}
    					}
    					break;
    
    				}
    				return true;
    			}
    		});
    	}
    
    
    }
    

    运行程序:

    欢迎关注本博客点击打开链接  http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦

  • 相关阅读:
    设计模式(十五)---桥梁模式
    设计模式(十四)---门面模式
    设计模式(十三)---享元模式
    设计模式(十二)---代理模式
    设计模式(十一)---装饰者模式
    设计模式(十)---合成模式
    设计模式(九)---缺省适配器模式
    设计模式(八)---适配器模式
    设计模式(七)---原始模型模式
    一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299581.html
Copyright © 2020-2023  润新知