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
@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; } }
版权声明:本文标题:android画图 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1721258856a868460.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论