Android 多媒体开发学习之撕衣服

今天我们学习撕衣服。我先说一下撕衣服的原理: 撕衣服有2张图片,一张是美女穿外衣的图片,一张是美女穿内衣的图片。当我们手指滑动后,然后将美女穿外衣衣服的图片设置为透明色,这样下面的图片就显示出来了。

直接上代码:

public class MainActivity extends Activity {

	private Bitmap bmpCopy;
	private Paint paint;
	private Canvas canvas;
	private ImageView imageView;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //1: 因为我修改外衣的图片,所以要给外衣设置副本
        Bitmap bmpSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);

        bmpCopy = Bitmap.createBitmap(bmpSrc.getWidth(), bmpSrc.getHeight(), bmpSrc.getConfig());
        paint = new Paint();
        canvas = new Canvas(bmpCopy);
        canvas.drawBitmap(bmpSrc, new Matrix(), paint);

        imageView = (ImageView) findViewById(R.id.lv2);
        imageView.setImageBitmap(bmpCopy);

        //2:监听触摸事件
        imageView.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();
					cleanImage(x, y);

					break;

				default:
					break;
				}
				return true;
			}
		});
    }

	//因为每次只设置1个像素,这样很慢
	public void cleanImage(int x, int y)
	{
		for(int i = -10; i < 10; i++)
		{
			for(int j = -10; j < 10; j++)
			{
				//绘制以x,y为圆心半径为10的圆
				if(Math.sqrt(i*i + j*j) <= 10)
				{
					//判断手指是否越界, 如果越界不处理
					if(x+i < bmpCopy.getWidth() && y+j < bmpCopy.getHeight() && x+i >=0 && y+j >=0)
					{
						//设置透明色
						bmpCopy.setPixel(x+i, y+j, Color.TRANSPARENT);
						//设置图像
						imageView.setImageBitmap(bmpCopy);
					}
				}
			}
		}
	}
}

效果图:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 03:17:03

Android 多媒体开发学习之撕衣服的相关文章

Android 多媒体开发学习之简单的音乐播放器

我们今天的目的是学习如何创建一个简单的音乐播放器,可支持播放,暂停,继续播放,以及进度显示,已经进度拖拽. 既然我们的目的已经很明确,那我们先分析一下: 1: 我们播放音乐的任务可以放在Activity中吗? 假设我们当前音乐播放,我们切到别的应用,这时候播放音乐的Activity所在的进程就属于后台进程,因为后台进程会由于系统资源不足时,会杀死当前进程,会导致音乐不播放了.所以采用Activity是不行的. 2:播放音乐的任务放在一个服务中,那服务有2中启动方式,应该使用那种服务? a:如果采

Android 多媒体开发学习之创建图片的副本

什么叫创建图片的副本? 因为我们直接从BitmapFactory取出来的图片是可读的,是不可以修改的. 假设用户想修改这张图片,一般是先根据原图在内存中创建和原图一模一样大小的图片,然后在上面修改,用户感觉好像是在原图上修改了,其实不然. public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn

Android 多媒体开发学习之制作一个简单的画板

一个简单的画板,可以绘制,可以选择颜色,可以保存. 当然了这种工具一般常用的通讯软件都是会有的,比如QQ, 飞秋等 其中我们必须监听手指的触摸事件,手指的触摸事件就分为3种: 按下,抬起,移动. 通常我们只需要关系按下的时候,然后就是整个手指滑动的过程.然后将手指滑动的过程绘制为不同的直线.当然也可以设置绘制的颜色,绘制直线的宽度等. public class MainActivity extends Activity { private int TouchX; private int Touc

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

Android多媒体开发-stagefright及AwesomePlayer相关知识梳理

android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( const char *url, const KeyedVector<String8, String8> *headers) { return mPlayer->setDataSource(url, headers); } status_t StagefrightPlayer::prepare

android移动开发学习笔记(一)逼上梁山

以前一直是做.net 项目,致力于web网站开发,年初,公司接了一个web网站开发项目,客户的要求是除了做web站点外,需要开发移动app,支持目前主流的Android和IOS手机系统,并且支持多分辨率和各种Pad等. 项目之初定的方案是用Html5和jQuery.Mobile做手机页面,用嵌套webview的方式实现,这样就可以一套程序走天下,对我们这些只做过web开发的人肯定是更容易.可惜天不遂人愿,客户就是强烈要求要原生AP,shit,这样就必然需要做移动开发,而且需要做两套程序,因为IO

android移动开发学习笔记(二)神奇的Web API

本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice?这些问题都不去解答,百度一下,关于这方面的资料很多,就不再去啰嗦. 一.如何在web端实现WebApi (1)如何新建一个WebApi? 在上一章中,讲到我们项目用的是.net 4.5,开发工具是Visual Studio 2012,在Visual Studio 2012中新建MVC4项目,选择W