`
jacky-zhang
  • 浏览: 315972 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

橡皮擦效果的实现

 
阅读更多
废话少说,直接贴代码,希望对大家有帮助。

public class DrawView extends View{
	private Canvas pcanvas;
	private Paint paint;
	private Path path;
	
	private Bitmap originBitmap;
	private Bitmap pureBitmp;
	private Bitmap bitmapBuff;
	private float scaleWidth;
	private float scaleHeight;
	private float downx = 0,downy = 0;
	
	public DrawView(Context context) {
		super(context);

        setBackgroundResource(R.drawable.pic);
        path = new Path();
        paint = new Paint();
        paint.setAlpha(0);
        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
        paint.setAntiAlias(true);
        
        paint.setDither(true);
        paint.setStyle(Paint.Style.STROKE);  
        paint.setStrokeJoin(Paint.Join.ROUND);  
        paint.setStrokeCap(Paint.Cap.ROUND);  
        paint.setStrokeWidth(15.6f); 
        
        initLayer(context);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawPath(path, paint);
		canvas.drawBitmap(bitmapBuff, 0, 0, null);
	}

    private void initLayer(Context context){
    	InputStream stream = context.getResources().openRawResource(R.drawable.layer);
        originBitmap = BitmapFactory.decodeStream(stream);
        int width = originBitmap.getWidth();
        int height = originBitmap.getHeight();
        
        Display currentDisplay = ((Activity)context).getWindowManager().getDefaultDisplay();
        float newWidth = currentDisplay.getWidth();
        float newHeight = currentDisplay.getHeight();
        
        scaleWidth = ((float) newWidth / width);
        scaleHeight = ((float) newHeight / height);

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);

        pureBitmp = Bitmap.createBitmap(originBitmap, 0, 0, width, height,matrix, true);
        bitmapBuff = Bitmap.createBitmap(pureBitmp.getWidth(),pureBitmp.getHeight(), Bitmap.Config.ARGB_8888);
        
        pcanvas = new Canvas(bitmapBuff);
        pcanvas.drawBitmap(pureBitmp, 0, 0, null);
    }
    
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		int action = event.getAction();
	    switch (action) {
	    case MotionEvent.ACTION_DOWN:
	      downx = event.getX();
	      downy = event.getY();
	      path.reset();
	      path.moveTo(downx, downy);
	      break;
	    case MotionEvent.ACTION_MOVE:
	      float upx = event.getX();
	      float upy = event.getY();
	      touchMove(upx, upy);
	      invalidate();
	      break;
	    case MotionEvent.ACTION_UP:
	      pcanvas.drawPath(path, paint);
	      path.reset();
	      invalidate();
	      break;
	    case MotionEvent.ACTION_CANCEL:
	      break;
	    default:
	      break;
	    }
		return true;
	}
	
	private void touchMove(float upx, float upy){
		float dx = Math.abs(downx-upx);
	      float dy = Math.abs(downy-upy);
	      if (dx >= 4 || dy >= 4) {
	        path.quadTo(downx, downy, (downx + upx)/2, (downy + upy)/2);
	        downx = upx;
		    downy = upy;
	      }
	}
}
分享到:
评论

相关推荐

    IOS应用源码之【应用】TouchGirl橡皮擦效果代码例子.rar

    3. **橡皮擦效果实现步骤** - **创建自定义视图**: 首先,我们需要创建一个继承自UIView的自定义视图类。在这个类中,我们将实现橡皮擦功能。 - **设置画布**: 为视图分配一个位图上下文,通常是通过`...

    as3_橡皮擦

    4. **橡皮擦效果实现**: 要实现橡皮擦效果,首先我们需要在舞台上创建一个可交互的对象,如MovieClip或Sprite,作为“橡皮擦”。当用户移动鼠标时,这个对象将跟随鼠标位置,并根据其形状和大小擦除下方的图像。这...

    C#实现鼠标拖拽Rectangle橡皮擦功能

    在C#编程中,实现鼠标拖拽Rectangle橡皮擦功能主要涉及到Windows Forms或WPF(Windows Presentation Foundation)的应用开发。这个功能通常用于图形编辑或画图应用,允许用户通过鼠标选择一个矩形区域来擦除内容。...

    QT实现橡皮擦功能.rar

    默认情况下,QPainter会在画布上绘制颜色,而我们想要实现橡皮擦效果,实际上就是清除或擦除画布上的部分区域,这可以通过设置QPainter的绘图模式为Qt::NoBrush,使其不再填充颜色,或者设置其笔刷透明度来实现。...

    IOS应用源码之【应用】-TouchGirl橡皮擦效果代码例子.rar

    6. **橡皮擦效果实现**: - **图像复制**:首先,我们需要保存原始图像,因为橡皮擦操作会改变图像,所以我们需要备份以便可以恢复。 - **创建上下文**:创建一个位图上下文,将原始图像作为其内容。 - **处理...

    cocos creator实现橡皮擦功能

    3. **实现橡皮擦效果**:擦除操作可以模拟为在画布上绘制透明度较高的颜色。在`touchmove`事件处理函数中,使用`cc.Graphics`的`fillRect`或`drawRect`方法,设置填充色为半透明白色(例如`new cc.Color(255, 255, ...

    橡皮擦效果

    在IT行业中,"橡皮擦效果"通常是指在软件或应用程序中实现的一种交互式功能,让用户能够通过类似橡皮擦的工具擦除某些元素或内容,以达到特定的效果。这种效果常见于图形编辑器、绘图应用或者游戏设计中,为用户提供...

    cocos2dx实现橡皮擦效果以及判断是否擦除完毕

    判断是否擦除完毕是指在橡皮擦效果实现后,判断是否所有图形都被擦除。我们可以使用以下代码来实现判断是否擦除完毕: ```cpp bool HelloWorld::myIsDataClear(RenderTexture* pRenderTexture) { // 获取 ...

    ios擦除效果(圆形和三角形橡皮擦)

    总之,实现iOS的橡皮擦效果需要掌握Core Graphics、事件处理以及图形混合模式等技术,同时考虑性能和用户体验。对于更复杂的手指形状橡皮擦,可能需要创建自定义的手势识别器来追踪手指的形状,并将其转换为相应的...

    android橡皮擦刮奖效果

    实现橡皮擦效果,可以通过在用户触摸路径上擦除覆盖层。可以创建一个`Paint`对象,设置其`Xfermode`为` PorterDuff.Mode.CLEAR`,这样在绘制时会清除目标颜色,露出底层的图像。 5. **遮罩层与底层图像**: 创建...

    HTML5 canvas橡皮擦擦拭效果

    在这个项目中,"css"目录可能包含了实现橡皮擦效果的样式,如橡皮擦的外观、鼠标形状的改变等。"scss"目录则可能包含SCSS源文件,编译后生成CSS文件。"img"目录可能存放了与效果相关的图像资源,而"fonts"目录可能...

    网页H5橡皮擦效果

    网页H5橡皮擦效果是Web开发中一种创新的交互设计,主要利用HTML5的Canvas元素和JavaScript技术来实现。Canvas作为HTML5的一个重要组成部分,提供了在浏览器端绘制图形的能力,使得开发者能够创建动态、交互式的用户...

    html5 canvas ps橡皮擦效果_类似刮刮卡橡皮擦效果

    要实现橡皮擦效果,我们需要加载一张图片并将其绘制到canvas上。这里假设我们有一个名为`image.jpg`的图片文件: ```javascript var img = new Image(); img.src = 'image.jpg'; img.onload = function() { ctx....

    安卓Android源码——橡皮擦与画笔的demo.zip

    6. **橡皮擦效果实现** 橡皮擦效果可以通过两种方式实现:一是使用`PorterDuff.Mode.CLEAR`模式的`Paint`在当前`Bitmap`上清除颜色;二是创建一个与画板相同大小的白色`Bitmap`作为橡皮擦位图,当用户擦除时,将...

    android上实现橡皮擦以及多种效果

    工程源代码,里面的实例是画笔在画布上画轨迹,可以设置画笔颜色、画笔浮雕效果、画笔模糊效应以及srcAtop等效果。还可以实现擦除Erase,供需要在view以及surface上绘图的人参考.有帮助的话给个好评哦

    js canvas实现橡皮擦效果

    使用JavaScript中的Canvas API实现橡皮擦效果,能够对Canvas上绘制的图形进行擦除操作,实现局部或全部的清除效果。这种效果广泛应用于绘图应用、游戏开发、图片编辑器等场景中,为用户提供了直接与图形交互的能力。...

    橡皮擦与画笔的demo.zip项目安卓应用源码下载

    6. **橡皮擦效果实现**:橡皮擦功能通常通过透明度或者颜色混合来模拟。在Android中,可以通过调整Paint的alpha值或使用Xfermode来实现。 7. **Bitmap与SurfaceView**:为了实现流畅的绘图体验,可能会使用...

    Halcon C#联合编程橡皮檫功能

    此外,橡皮擦操作的精度和效果可能会受到模型质量、匹配参数以及图像预处理步骤的影响。 为了测试橡皮擦功能,你可以创建一个名为`TestEraser`的项目,包含一个主程序,读取图像并调用上述`HalconEraser`类的方法...

    惊艳橡皮擦刷新,动画流畅、渲染高效。

    总的来说,"惊艳橡皮擦刷新"是一个优秀的iOS开发工具,它利用OC绘图技术实现了QQ的橡皮擦刷新效果,通过简洁的API让开发者能够快速集成到应用中,提升了用户体验,同时也为应用增加了独特的魅力。无论是对于新手还是...

    IOS应用源码Demo-TouchGirl橡皮擦效果代码例子-毕设学习.zip

    在iOS开发中,实现独特的交互效果常常能提升用户体验,TouchGirl橡皮擦效果代码例子就是一个典型的实例,展示了如何在iOS应用中实现橡皮擦功能。这个项目非常适合iOS开发者,特别是那些正在进行毕业设计或论文研究的...

Global site tag (gtag.js) - Google Analytics