java做橡皮擦效果_Android自定义橡皮擦效果
本文实例为大家分享了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自定义橡皮擦效果相关推荐
- c#控件弹幕效果_Android 自定义View修炼-自定义弹幕效果View
一.概述 现在有个很流行的效果就是弹幕效果,满屏幕的文字从右到左飘来飘去.看的眼花缭乱,看起来还蛮cool的 现在就是来实现这一的一个效果,大部分的都是从右向左移动漂移,本文的效果中也支持从左向右的漂 ...
- [HTML/CSS]动画效果以及自定义动画效果
一,实现div或者文字的当鼠标浮于其上时的动画效果: 1,transition加在div中,实现动画效果的过渡效果,transition: all 3s;其中all表示所有样式都参与过渡,3s表示实现 ...
- java电影票选座_Android自定义view实现电影票在线选座功能
先看看电影票在线选座功能实现的效果图: 界面比较粗糙,主要看原理. 这个界面主要包括以下几部分 1.座位 2.左边的排数 3.左上方的缩略图 4.缩略图中的红色区域 5.手指移动时跟随移动 6.两个手 ...
- java 手写签名_Android 自定义View手写签名并保存图片
GIF压缩有问题,运行很顺滑!!! 1.自定义View--支持设置画笔颜色,画笔宽度,画板颜色,清除画板,检查是否有签名,保存画板图片(复制粘贴可直接使用) /*** Created by YyyyQ ...
- android java 圆角_Android自定义View实现带4圆角或者2圆角的效果
1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行. 2) 实现view上2圆角 我们只需要 ...
- java渐变色字体生成器_java阴影文字效果怎么做?渐变的怎么做?
随着时代的不断发展,新兴技术的使用也促使人们不断地在学习进步.今天主要为大家介绍一下,java的阴影和渐变的文字效果怎么做. 首先为大家介绍的是阴影效果文字的做法.第一步:使用Graphics类的se ...
- viewpager 自定义翻页效果_Android RecyclerView自定义LayoutManager
在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定 ...
- android仿微博头像_Android 自定义 View 集锦|自定义圆形旋转进度条,仿微博头像加载效果...
微博 App 的用户头像有一个圆形旋转进度条的加载效果,看上去效果非常不错,如图所示: 据说 Instagram 也采用了这种效果.最近抽空研究了一下,最后实现的效果是这样: 基本上能模拟出个大概,代 ...
- android 按下缩小效果松开恢复_Android自定义ScrollView实现放大回弹效果
背景 在很多项目中我们都会用到ScrollView这个控件,因为ScrollView能够在屏幕内容多时下上滑动以适配加载的内容.但是ScrollView滑动时效果感觉太死板了,这个时候我们如果给它添加 ...
- 用RecyclerView做一个小清新的Gallery效果
一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...
最新文章
- Linux网络基本网络配置
- mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
- git 回退上一个版本_Git小白使用教程:详细、显现、真正手把手教!
- 模拟聊天室显示语句保持最新显示
- 【计算机网络】计算机网络概述
- python地址簿3.7版本_用python编写地址簿程序的问题
- 消息队列(MQ):ZeroMQ 中间件设计【译文】
- stl之string类用法详细总结
- 经典机器学习系列(六)【集成学习】
- elasticdump 数据导入导出
- cornerstone 加载dicom图像不同分辨率导致图像被截取的问题。
- steam遇到错误代码解决方案
- 广州恒义计算机科技,【长文】SONY MAP-S1解码一体机恒义科技HY-05台式耳放听感测评...
- 方差分析基本介绍以及MATLAB实现
- php chm中文手册201502月更新
- norms matlab
- android 录制视频模糊,安卓手机录制视频不清晰是什么原因?_科技数码通
- Java整合Jsonpath解析Json字符串
- 极客时间Go实战训练营zui新
- IE10访问Apache2.4卡死的问题
热门文章
- android 字体特效,Android自定义View实现闪耀字体效果
- golang快速入门[3]-go语言helloworld
- C++ emplace_back用法介绍
- Unity笔记-29-ARPG游戏项目-13-打击感(卡肉)与僵直感
- 只有程序员能看懂的西游记
- invalid index of a 0-dim tensor
- numpy的squeeze函数和expand_dims函数
- 美丽心灵 A Beautiful Mind
- 我和权威的故事——王垠
- Resolver error Error Downloading VS Code Server failed - please install either curl or wget on the