admin管理员组

文章数量:1530846

2024年7月18日发(作者:)

1.将背景图片在屏幕的canvas画布上先画好,例如

tmap(bgBitmap,0,0,null);

2.新建一个Bitmap,例如Bitmap

tempBitmap=Bitmap(100,100,_4444);并以此

Bitmap新建一个临时画布canvas例如:Canvas temptCanvas=new

Canvas(tempBitmap);然后再执行一步把tempBitmap的背景色画成透明的

lor(ARENT);这样做的目的是把新建的那个临时

画布的目标定位在哪个tempBitmap上,这样做以后,调用temptCanvas的一切draw

函数,都会把相应的图像画在临时的tempBitmap上,而不是

在原先的屏幕上。

3.临时画布temptCanvas和临时Bitmap建好后,下面就是开始绘画了,要注意的是现

在的画点,画线什么的都是调用temptCanvas而不是原先屏幕上的canvas,比如应该是

int ,temptCanvasRect, ne等等,如果现

在要画橡皮的痕迹,那么先要设置画笔的颜色or();这里只要

不设置成ARENT透明色就行,颜色任意;再设置画笔的模式

rmode(new PorterDuffXfermode(_OUT));这一步非常重要,

它的作用是用此画笔后,画笔划过的痕迹就变成透明色了。画笔设置好了后,就可以调用该

画笔进行橡皮痕迹的绘制了,例如th(eraPath,mPaint);

4.在所有的画笔痕迹和橡皮痕迹绘制完成后,执行最后一步,

tmap(tempBitmap,0,0,null);这里要注意的是canvas而不是

temptCanvas了!temptCanvas负责的是将各种画笔痕迹画在tempBitmap上,而

canvas负责将tempBitmap绘制到屏幕上。

这样就完成了橡皮功能了!总的思路就是,先在屏幕上绘制出来,其余的各种画笔痕迹(包

括橡皮痕迹)统统绘制在一个临时的Bitmap上,至于橡皮则使用_OUT模式,

将橡皮痕迹处Bitmap设置为透明。然后再将这个临时的Bitmap绘制在屏幕上,这样透

明的地方就会显示出背景图片了,完成橡皮效果,这个有点类似PS里的图层思想(在此感

谢3楼提供的思路,谢谢~),省时实力。

Android+SurfaceView+path+onTouchEvent画图 .

/wangjia55/article/details/7823946

import ty;

import t;

import ;

import ;

import ;

import ;

import pe;

import ;

import ;

import Event;

import eHolder;

import eView;

import Manager;

public class TouchAndSurActivity extends Activity {

GameView myView;

Point point=new Point();

Paint paint = new Paint();

Path path = new Path();

@Override

public void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

getWindow().setFlags(_FULLSCREEN,Win

_FULLSCREEN);//设置全屏显示

myView = new GameView(this); setContentView(myView);//使其显示视图

}

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

h(event);

validate();

return hEvent(event);

}

public class GameView extends SurfaceView implements

ck {

SurfaceHolder surfaceHolder;

public GameView(Context context) {

super(context);

// TODO Auto-generated constructor stub

surfaceHolder = der();

lback(this);

usable(true);

}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int

height) {

}

public void surfaceCreated(SurfaceHolder holder) {

}

public void surfaceDestroyed(SurfaceHolder holder) {

}

public void OnTouch(MotionEvent event){

or();

le(); //关键在于设置这个 ,默认情况下为实心!!

okeWidth(3);//设置线条粗细

switch (ion()) {

case _DOWN:

((), ()-40);//设置起点

break;

case _MOVE:

((), ()-40); Canvas canvas =

nvas();

th(path, paint);//指定轨迹画图 由于path是多个轮廓叠加在一起,所

以可以绘制在一张图上面。越往后,path中包含的轮廓越多!

CanvasAndPost(canvas);

break;

case _UP:

break;

default: break;

}//switch

}//Ontouch

} //GameView

}//TouchAndSurActivity

2012-09-25 15:49 | freeliver54

#2楼[楼主]

package ;

import ist;

import ;

支持(0)反对(0)

import ty;

import ;

import ;

import Factory;

import ;

import ;

import ;

import ;

import ;

import DuffXfermode;

import ;

import ;

import Event;

import ;

import iew;

import Layout;

public class CanvasBitmapClipShow extends Activity {

ImageView imgViewA ;

List points;

@Override

public void onCreate(Bundle savedInstanceState) {

tWindowFeature(E_NO_TITLE);

te(savedInstanceState);

setContentView(_bitmap_clip_show);

imgViewA = (ImageView)findViewById(iewA);

points = new ArrayList();

}

@Override

public boolean onTouchEvent(MotionEvent event) {

Point point = new Point();

point.x = (int)();

point.y = (int)();

(point);

geBitmap(createBitmap());

return hEvent(event);

}

private Bitmap createBitmap(){

Bitmap srcBitmap = Resource(getResources(),

);

Bitmap bmp = null;

bmp = Bitmap(th(), ght(),

_4444);

Canvas canvas = new Canvas(bmp);

lor(ARENT);// 透明色

tmap(srcBitmap,0,0,null);

int iCount = ();

if(iCount>0){

Paint paint = new Paint();

or();

rmode(new PorterDuffXfermode(_OUT));//橡皮

for(int i=0;i

Point point = (i);

Rect rect = new Rect(point.x - 15 , point.y - 15 , point.x + 15,point.y + 15);

ct(rect, paint);

}

}

return bmp;

}

}

本文标签: 痕迹设置橡皮画笔绘制