android撕衣服应用介绍

来源:互联网 发布:软件订购合同 编辑:程序博客网 时间:2024/04/19 20:30
/**
 * 主要原理就是利用canvas绘制一层透明色,让后将穿完整衣服的那个图片绘制上。他们之前的层次模型为PorterDuff.Mode.DST_OUT;
 * View的draw的时候先绘制没穿衣服的那张图片,然后绘制刚才canvas绘制的两张图叠加起来的那张图;
 * 最后手触屏滑动的时候通过canvas的drawPath()进行绘制。
 * @author lucas
 *
 */
public class ShowGirlView extends View {

Bitmap new_bitmap;//声明Bitmap类
Bitmap back_bitmap;//声明Bitmap类
Bitmap fore_bitmap;//声明Bitmap类

Canvas mCanvas;//声明画布类
Paint paint;//声明画笔类
Path path;//画图类

int startX;//声明startX变量
int startY;//声明startY变量

int width;//声明width变量
int height;//声明height变量
int num;//声明num变量
Matrix matrix;//使用矩阵控制图片移动、缩放、旋转  
ImageResource imageRes;//声明ImageResource类


public ShowGirlView(Context context, int width, int height, int num) {//构造方法
super(context);
this.width = width;
this.height = height;
this.num = num;
init();
}


public ShowGirlView(Context context, AttributeSet attrs, int width, int height, int num) {//构造方法
super(context, attrs);
this.width = width;
this.height = height;
this.num = num;
init();
}


void init() {
imageRes = ImageResource.getImageResource();//实例化 ImageResource类

fore_bitmap = imageRes.getForeBitmap(getResources(), num);//实例化Bitmap类 temp_bitmap
back_bitmap = imageRes.getBackBitmap(getResources(), num);//实例化Bitmap类 back_bitmap

new_bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);//创建一个位图 ARGB_8888 代表32位ARGB位图

paint = new Paint();//实例化paint类 画笔类
paint.setAntiAlias(true);//设置画笔的锯齿效果
paint.setDither(true); //防抖动

mCanvas = new Canvas(new_bitmap);//实例化 画布 fore_bitmap类当参数
mCanvas.drawColor(Color.TRANSPARENT);//设置画布颜色为透明

matrix = new Matrix();
//缩放  它采用两个浮点数作为参数,分别表示在每个轴上所产生的缩放量。第一个参数是x轴的缩放比例,而第二个参数是y轴的缩放比例。
matrix.setScale(width * 1.0f / fore_bitmap.getWidth(), height * 1.0f / fore_bitmap.getHeight());

mCanvas.drawBitmap(fore_bitmap, matrix, paint);//绘制图像
fore_bitmap.recycle();//回收

        paint.setColor(Color.RED);//设置画笔颜色
        paint.setStrokeWidth(20);//设置描边宽度
        BlurMaskFilter bmf = new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL);//指定了一个模糊的样式和半径来处理Paint的边缘。
        paint. setMaskFilter(bmf);//为Paint分配边缘效果。
        paint.setStyle(Paint.Style.STROKE);//让画出的图形是空心的  
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//它的作用是用此画笔后,画笔划过的痕迹就变成透明色了。画笔设置好了后,就可以调用该画笔进行橡皮痕迹的绘制了
        paint.setStrokeJoin(Paint.Join.ROUND);//设置结合处的样子 Miter:结合处为锐角, Round:结合处为圆弧:BEVEL:结合处为直线。
        paint.setStrokeCap(Paint.Cap.SQUARE);//画笔笔刷类型   方形形状

path = new Path();//实例化画图类
}


protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.drawBitmap(back_bitmap, matrix, null);//绘制图像
canvas.drawBitmap(new_bitmap, 0, 0, null);//绘制图像
}

public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();//获得触摸的X轴位置
int y = (int) event.getY();//获得触摸的Y轴位置
int position = event.getAction();//获得的返回值 获取触控动作比如ACTION_DOWN

int endX = 0;//声明变量endX
int endY = 0;//声明变量endY

switch (position){
case MotionEvent.ACTION_DOWN://当触摸时按下时
startX = x;
startY = y;
endX = x;
endY = y;
break;
case MotionEvent.ACTION_MOVE://当触摸移动时
endX = x;
endY = y;
break;
case MotionEvent.ACTION_UP://当触摸结束时
endX = x;
endY = y;
break;
}

path.moveTo(startX, startY);//起始点  
path.lineTo(endX, endY);//终点
mCanvas.drawPath(path, paint);//绘制图像

postInvalidate();//刷新界面

startX = endX;//将 endX值 也就是停止触摸时X轴的位置 付给 startX当中
startY = endY;//将 endY值 也就是停止触摸时X轴的位置 付给 startY当中

return true;
}

/**
* 用来回收内存
*/
public void realease(){
if(null != back_bitmap && !new_bitmap.isRecycled()){
back_bitmap.recycle();
}
if(null != new_bitmap && !new_bitmap.isRecycled()){
new_bitmap.recycle();
}
}

}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 申请退货退款卖家不处理怎么办 淘宝买东西换货卖家不发货怎么办 淘宝自动默认付款没发货怎么办 支付宝支付失败可钱扣了怎么办 苹果nfc感应坏了怎么办 老鼠添过的盘子怎么办 ie浏览器页面显示网页错误怎么办 Ⅵvo手机声音小怎么办 小米手机预约错了怎么办 小米note二手没解锁怎么办 艾灸后脸色越黑怎么办 淘宝软件类目不能上架宝贝怎么办 ae中没有mpg格式怎么办 淘宝小二处理不公怎么办 遇到卖保险的人怎么办 租房合同没理家电清单怎么办 普雪油烟机坏了怎么办 我累了 真的累了怎么办 u盘15g变成4g了怎么办 属兔的买了东户怎么办 玩时时彩输了2万怎么办 胸变的又软又小怎么办 u盘16g变成4g了怎么办 1岁宝宝吃了就吐怎么办 脚崴了肿了很痛怎么办 九格拼图5在9那怎么办 4s锁屏密码忘了怎么办 6p触屏偶尔乱跳怎么办 新办劳务公司的劳务资质怎么办 汽车没电了打不着火怎么办 吃凉的甜的牙疼怎么办 学车对点对不上怎么办 发现老公有外遇最明智的怎么办 想开个童装店但是没经验怎么办 母乳不够吃宝宝又不喝奶粉怎么办 掉头发很厉害怎么办有什么偏方 红米2a刷死机了怎么办 公司退市我们买的股票怎么办 黑魂3把npc杀了怎么办 摔倒了膝盖摔肿了又痛怎么办 厕所堵了怎么办疏通马桶有妙招