文档章节

Android进阶学习--十几行代码实现美女撕衣服效果

August1996_
 August1996_
发布于 2016/05/22 12:29
字数 481
阅读 45
收藏 0

    效果图:

    在这篇文章文章里有介绍过PorterDuffXfermode这个类,下面来用这个知识点来实现一下那种撕衣服的特效,先给两张图片:

上面叫做bg.jpg,下面叫做fg.jpg

然后就直接开始编码啦

1.布局文件:

<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"
    tools:context="com.example.customview.MoveActivity" >

    <com.example.customview.GuaView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

2.编码文件:

package com.example.customview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class GuaView extends View {
	
	private Paint	mPaint;
	private Bitmap	bg;
	private Bitmap	fg;
	private Canvas	mCanvas;
	private Path	mPath;
					
	public GuaView(Context context) {
		this(context, null);
	}
	
	public GuaView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}
	
	public GuaView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		
		bg = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
		fg = Bitmap.createBitmap(bg.getWidth(), bg.getHeight(), Bitmap.Config.ARGB_8888);
		/**
		 * fg必须使用这种方式去加载,不然默认加载的bitmap是不允许Canvas在上面画的
		 */
		
		mCanvas = new Canvas(fg);
		mCanvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fg), 0, 0, null);
		/**
		 * 先把前面那张穿衣服的画上去
		 */
		
		mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
		mPaint.setAlpha(0);
		mPaint.setStyle(Paint.Style.STROKE);
		mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
		/**
		 * 这里的src是有衣服的那张fg
		 * dst是后面画上来的线条,后面画上来的区域
		 * 我们把后面画上来的区域alpha设置为透明
		 */
		mPaint.setStrokeWidth(50);
		mPath = new Path();
		
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				mPath.reset();
				mPath.moveTo(event.getX(), event.getY());
				break;
			case MotionEvent.ACTION_MOVE:
				mPath.lineTo(event.getX(), event.getY());
				break;
				
			default:
				break;
		}
		mCanvas.drawPath(mPath, mPaint);
		invalidate();
		return true;
	}
	/**
	 * 监听触摸事件,每次都把透明的线画上去,然后重绘View
	 */
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawBitmap(bg, 0, 0, null);
		canvas.drawBitmap(fg, 0, 0, null);
		/**
		 * 这时候我们就可以把背景跟fg画上去啦
		 * 其实最下面一层是bg(不穿衣服的),然后上一层是fg(穿衣服,但是经过图层符复合有些是透明显示的,这时候就能看到下面一层了)
		 */
	}
}

自己可以找两张美女的图片...

© 著作权归作者所有

共有 人打赏支持
August1996_
粉丝 2
博文 51
码字总数 29055
作品 0
湛江
程序员
android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码

Android精选源码 一个爬取美女图片的app(http://www.apkbus.com/thread-600077-1-1.html) Android高仿抖音(http://www.apkbus.com/thread-600081-1-1.html) android一个可以上拉下滑的Ui效果......

逆鳞龙
06/12
0
0
最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
0
1
【必看】Android干货整理

哗啦啦,为方便大家更好的学习交流,小编特地整理了一大波干货!预备 前方高能预警,一大波干货袭来,接住了!!!!!!!!!!!! 如果你是零基础小白,不知如何上手Android开发,不知应学习哪些工具...

慕课网官方_运营中心
08/01
0
0
CSDN精选Android开发博客

[1] 张国威:Android从入门到提高系列 前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针...

晨曦之光
2012/02/24
0
0
android中一些view处理(拖动,定位,显示,图层)

在看到现行手机能够趋近拥有与pc机相同性能的同时,我们不难发现各种应用、软件都移植到了手机上,略从android,iphone,ophone等智能手机系统,我们便能一叶知秋了。 每天学习着android,会...

蔻之
2011/03/20
0
7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
51分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
53分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部