Android应用《撕开美女衣服》的实现过程及源代码
现在很多Android市场中都能找到关于美女的应用,比如 撕开美女衣服、吹裙子等。
这些应用的下载量挺大的,作为Android的开发人员或者一名技术人员我们不能只局限在欣赏应用的层面,很多时候需要我们去揭开神秘背后的真相,下面我们来看一下如何来开发这样一个类似的撕开美女衣服的应用。
先来看一下效果:
其实这个应用的原理很简单,有两张图片,布局如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/back_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/back"/> <ImageView android:id="@+id/up_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/up"/> </FrameLayout>
上面一张图片是穿着衣服的图片,下面一张图片是撕开衣服的图片。
在Activity中我们先创建一个可以编辑的Bitmap图片对象,然后对该图片中像素点的颜色(透明度)进行改变就实现我们所要的效果了。
package com.example.sikaimeinvyifu; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView backImg; private ImageView upImg; private Bitmap alterBitmap; private Canvas canvas; private Paint paint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //改变图片大小 BitmapFactory.Options opts = new Options(); opts.inSampleSize = 1; backImg = (ImageView) findViewById(R.id.back_img); upImg = (ImageView) findViewById(R.id.up_img); //只读的图片 Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.back, opts); Bitmap up = BitmapFactory.decodeResource(getResources(), R.drawable.up, opts); //可以修改的空白的Bitmap alterBitmap = Bitmap.createBitmap(up.getWidth(), up.getHeight(), up.getConfig()); //将alterBitmap作为画布,然后将Bitmap up画到画布上。 canvas = new Canvas(alterBitmap); paint = new Paint(); paint.setStrokeWidth(5); paint.setColor(Color.BLACK); canvas.drawBitmap(up, new Matrix(), paint); backImg.setImageBitmap(back); upImg.setImageBitmap(alterBitmap); upImg.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(); System.out.println(x); System.out.println(y); for(int i=-5; i<5; i++){ for(int j=-5; j<5; j++){ //更改画布上该像素点的颜色 alterBitmap.setPixel(i + x, j + y, Color.TRANSPARENT); } } //重新绘制到ImageView上面 upImg.setImageBitmap(alterBitmap); break; default: break; } return true; } }); } }
源代码下载地址:http://download.csdn.net/detail/lxq_xsyu/6744849
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)