本文实例为大家分享了Android自定义橡皮擦效果,使用贝塞尔曲线处理曲线转折处

public class picFingerToTest extends View {

private Paint paint;

private Bitmap decodeResourceSRC;

private Bitmap createBitmapDST;

// 手指路径,使用贝塞尔路线

private Path path;

private float perX;

private float perY;

public picFingerToTest(Context context, AttributeSet attrs) {

super(context, attrs);

// 1、设置禁用硬件设置

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

// 2、设置手指画笔

paint = new Paint();

paint.setAntiAlias(true);

paint.setColor(Color.RED);

paint.setStyle(Paint.Style.STROKE);

paint.setStrokeWidth(45);

// 3、生成图像手指源目标

// 源

decodeResourceSRC = BitmapFactory.decodeResource(getResources(), R.drawable.welcome, null);

// 目标

createBitmapDST = Bitmap.createBitmap(decodeResourceSRC.getWidth(), decodeResourceSRC.getHeight(),

Config.ARGB_8888);

path = new Path();

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// 分层绘制

int saveLayer = canvas.saveLayer(0, 0, getWidth(), getHeight(), null,Canvas.ALL_SAVE_FLAG);

// 把手指轨迹划到目标路径上

Canvas canvas2 = new Canvas(createBitmapDST);

canvas2.drawPath(path, paint);

// 把目标图像画到画布上

canvas.drawBitmap(createBitmapDST, 0, 0, paint);

// 计算源图像区域

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));

canvas.drawBitmap(decodeResourceSRC, 0, 0, paint);

paint.setXfermode(null);

canvas.restoreToCount(saveLayer);

}

//使用贝塞尔曲线,使折线过度圆滑

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

// 记录手指触摸的初始化位置

case MotionEvent.ACTION_DOWN:

path.moveTo(event.getX(), event.getY());

perX = event.getX();

perY = event.getY();

return true;

case MotionEvent.ACTION_MOVE:

float endX = (perX + event.getX()) / 2;

float endY = (perY + event.getY()) / 2;

path.quadTo(perX, perY, endX, endY);

perX = event.getX();

perY = event.getY();

postInvalidate();

break;

case MotionEvent.ACTION_UP:

break;

default:

break;

}

return super.onTouchEvent(event);

}

}

小编再为大家补充一段代码:android橡皮擦擦图片功能

public void onCreate() {

//底边图片

ImageView ivTop = (ImageView) findViewByid(R.id.iv_top);

Options opts = new Options(); //图片加载器,用于配置一些缩放比例,和像素单位

opts.inSampleSize = 2; //制定加载器把原图片的宽高缩放到2/1的效果加载

//获得外层图片,decodeResource方法默认获得的像素单位是RGB(red,green,blue),ARGB(alpha,red,green,blue)

Bitmap topImage = BitmapFactory.decodeResources( getResource(),R.drawable.top, opts);

//创建一张空白图片,并且把图片想读单位指定为:ARGB

Bitmap blank = Bitmap.createBitmap(topImage.getWidth(), topImage.getHeight, Config.ARGB_4444);

//把上边的topImage画到空白图片上

Canvas canvas = new Canvas(blank);

//把topImage画到空白图片上但是像素单位变成ARGB()

canvas.drawBitmap(topImage, 0, 0, null);

ivTop.setImageBitmap(blank);

}

class MyOnTouchListoner implements OnTouchListener {

@Override pulic boolean OnTouch(View v, MotionEvent event) {

//是否是移动的事件

if (event.getAction() == MotionEvent.ACTION_MOVE) {

//获得按下坐标

int x = (int) event.getX();

int y = (int) event.getY();

for (int i = x - 10; i < x + 10; i++) {

for (int j = y - 10; j < y + 10; j++) {

//防止超出边界

if (j >= 0 && blank.getHeight() && i >= 0 && i < blank.getWidth()) {

blank.setPixel(i, j, Color.TRANSPARENT);

}

}

}

//修改后的图片设置给ImageView

ivTop.setImageBitmap(blank);

}

return true; //true 消耗掉这次触摸事件.false 不消耗

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java做橡皮擦效果_Android自定义橡皮擦效果相关推荐

  1. c#控件弹幕效果_Android 自定义View修炼-自定义弹幕效果View

    一.概述 现在有个很流行的效果就是弹幕效果,满屏幕的文字从右到左飘来飘去.看的眼花缭乱,看起来还蛮cool的 现在就是来实现这一的一个效果,大部分的都是从右向左移动漂移,本文的效果中也支持从左向右的漂 ...

  2. [HTML/CSS]动画效果以及自定义动画效果

    一,实现div或者文字的当鼠标浮于其上时的动画效果: 1,transition加在div中,实现动画效果的过渡效果,transition: all 3s;其中all表示所有样式都参与过渡,3s表示实现 ...

  3. java电影票选座_Android自定义view实现电影票在线选座功能

    先看看电影票在线选座功能实现的效果图: 界面比较粗糙,主要看原理. 这个界面主要包括以下几部分 1.座位 2.左边的排数 3.左上方的缩略图 4.缩略图中的红色区域 5.手指移动时跟随移动 6.两个手 ...

  4. java 手写签名_Android 自定义View手写签名并保存图片

    GIF压缩有问题,运行很顺滑!!! 1.自定义View--支持设置画笔颜色,画笔宽度,画板颜色,清除画板,检查是否有签名,保存画板图片(复制粘贴可直接使用) /*** Created by YyyyQ ...

  5. android java 圆角_Android自定义View实现带4圆角或者2圆角的效果

    1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行. 2) 实现view上2圆角 我们只需要 ...

  6. java渐变色字体生成器_java阴影文字效果怎么做?渐变的怎么做?

    随着时代的不断发展,新兴技术的使用也促使人们不断地在学习进步.今天主要为大家介绍一下,java的阴影和渐变的文字效果怎么做. 首先为大家介绍的是阴影效果文字的做法.第一步:使用Graphics类的se ...

  7. viewpager 自定义翻页效果_Android RecyclerView自定义LayoutManager

    在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定 ...

  8. android仿微博头像_Android 自定义 View 集锦|自定义圆形旋转进度条,仿微博头像加载效果...

    微博 App 的用户头像有一个圆形旋转进度条的加载效果,看上去效果非常不错,如图所示: 据说 Instagram 也采用了这种效果.最近抽空研究了一下,最后实现的效果是这样: 基本上能模拟出个大概,代 ...

  9. android 按下缩小效果松开恢复_Android自定义ScrollView实现放大回弹效果

    背景 在很多项目中我们都会用到ScrollView这个控件,因为ScrollView能够在屏幕内容多时下上滑动以适配加载的内容.但是ScrollView滑动时效果感觉太死板了,这个时候我们如果给它添加 ...

  10. 用RecyclerView做一个小清新的Gallery效果

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

最新文章

  1. Linux网络基本网络配置
  2. mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
  3. git 回退上一个版本_Git小白使用教程:详细、显现、真正手把手教!
  4. 模拟聊天室显示语句保持最新显示
  5. 【计算机网络】计算机网络概述
  6. python地址簿3.7版本_用python编写地址簿程序的问题
  7. 消息队列(MQ):ZeroMQ 中间件设计【译文】
  8. stl之string类用法详细总结
  9. 经典机器学习系列(六)【集成学习】
  10. elasticdump 数据导入导出
  11. cornerstone 加载dicom图像不同分辨率导致图像被截取的问题。
  12. steam遇到错误代码解决方案
  13. 广州恒义计算机科技,【长文】SONY MAP-S1解码一体机恒义科技HY-05台式耳放听感测评...
  14. 方差分析基本介绍以及MATLAB实现
  15. php chm中文手册201502月更新
  16. norms matlab
  17. android 录制视频模糊,安卓手机录制视频不清晰是什么原因?_科技数码通
  18. Java整合Jsonpath解析Json字符串
  19. 极客时间Go实战训练营zui新
  20. IE10访问Apache2.4卡死的问题

热门文章

  1. android 字体特效,Android自定义View实现闪耀字体效果
  2. golang快速入门[3]-go语言helloworld
  3. C++ emplace_back用法介绍
  4. Unity笔记-29-ARPG游戏项目-13-打击感(卡肉)与僵直感
  5. 只有程序员能看懂的西游记
  6. invalid index of a 0-dim tensor
  7. numpy的squeeze函数和expand_dims函数
  8. 美丽心灵 A Beautiful Mind
  9. 我和权威的故事——王垠
  10. Resolver error Error Downloading VS Code Server failed - please install either curl or wget on the