Android自定義橡皮擦效果
更新時間:2018年12月20日 09:53:29 作者:676598624
這篇文章主要為大家詳細(xì)介紹了Android自定義橡皮擦效果,橡皮擦擦圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了Android自定義橡皮擦效果,使用貝塞爾曲線處理曲線轉(zhuǎn)折處
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、設(shè)置禁用硬件設(shè)置
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
// 2、設(shè)置手指畫筆
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(45);
// 3、生成圖像手指源目標(biāo)
// 源
decodeResourceSRC = BitmapFactory.decodeResource(getResources(), R.drawable.welcome, null);
// 目標(biāo)
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);
// 把手指軌跡劃到目標(biāo)路徑上
Canvas canvas2 = new Canvas(createBitmapDST);
canvas2.drawPath(path, paint);
// 把目標(biāo)圖像畫到畫布上
canvas.drawBitmap(createBitmapDST, 0, 0, paint);
// 計(jì)算源圖像區(qū)域
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);
}
}
小編再為大家補(bǔ)充一段代碼:android橡皮擦擦圖片功能
public void onCreate() {
//底邊圖片
ImageView ivTop = (ImageView) findViewByid(R.id.iv_top);
Options opts = new Options(); //圖片加載器,用于配置一些縮放比例,和像素單位
opts.inSampleSize = 2; //制定加載器把原圖片的寬高縮放到2/1的效果加載
//獲得外層圖片,decodeResource方法默認(rèn)獲得的像素單位是RGB(red,green,blue),ARGB(alpha,red,green,blue)
Bitmap topImage = BitmapFactory.decodeResources( getResource(),R.drawable.top, opts);
//創(chuàng)建一張空白圖片,并且把圖片想讀單位指定為: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) {
//獲得按下坐標(biāo)
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);
}
}
}
//修改后的圖片設(shè)置給ImageView
ivTop.setImageBitmap(blank);
}
return true; //true 消耗掉這次觸摸事件.false 不消耗
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android ViewPager實(shí)現(xiàn)輪播圖效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)輪播圖效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
kotlin 官方學(xué)習(xí)教程之基礎(chǔ)語法詳解
這篇文章主要介紹了kotlin 官方學(xué)習(xí)教程之基礎(chǔ)語法詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android進(jìn)階之Spinner下拉框的使用方法
這篇文章主要為大家詳細(xì)介紹了Android進(jìn)階之Spinner下拉框的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
基于Android實(shí)現(xiàn)一個常用的布局吸頂效果
這篇文章給大家介紹一個布局吸頂效果,一般出現(xiàn)在內(nèi)容較長頁面還嵌套著分類頁面的情況,比如電商的詳情頁嵌套分類,在頁面滑動到tab的時候我們希望tab還能保留在頁面頂部而不被頂上去,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09
Android編程實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的方法詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的原理、具體流程與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06
Android開發(fā)獲取手機(jī)Mac地址適配所有Android版本
這篇文章主要介紹了Android開發(fā)獲取手機(jī)Mac地址適配所有Android版本,需要的朋友可以參考下2020-03-03

