导航:首页 > 操作系统 > androidcanvas扇形

androidcanvas扇形

发布时间:2024-08-16 20:54:32

android canvas.drawbitmap(bitmap,0,0,null)什么意思

你是要实现图画功能的吧?这个很简单理解。

canvas.drawbitmap()函数你可以理解为新建一个画布, 就好比画家的画板,当然你不往里面添加东西,就什么都没有,它是空的。现在放入参数, bitmap就是导入你已有的图片,比如,画家上次还没画完的一张图片,现在放在画板上,要继续工作。参数,0,0,为设置这张画在画板上的放置的位置,0,0为x轴和y轴的坐标,如果是(0,0),则默认为从从左上角开始放置。下面的一张图片为设置不同参数的时候,这种那个图片放置在这个画板上的位置的变化,你可以看到我设置为(100,10),也就是x坐标100,图片离左边距离为100;y坐标10,图片离上方距离为10,你可以看到左边黑色的部分占了100,上边部分的黑色占了10.最后,就是那个null,null的参数是用来设置画笔的,你没有画笔,当然就不用设了,你这个只是简单的,见图片显示在画板上,并没有实现要在画板上画图的功能 。你还想实现美妙显示多少张图片的话,我只能给你指示简单的方向,就是你要设置一个定时器,在定时器里面,加上你的这个函数,然后定时更改参数bitmap变量,这个bitmap是图片的路径,实现实现每秒多少贞,就是要设置定时器你每秒,你改变参数bitmap的频率,关于这个问题,你还得学习下定时器,再说下去内容就多了,你还是自己先琢磨吧……
ps:其实这个函数还比较好理解,不好理解的是要开始实现画图的时候,要设置两个这样的,实现双缓冲,这个比较难,多看看书吧,我也只能帮你到这里了。祝你学习快乐哈~我也正在学习。

㈡ android 上用canvas绘图之后,我想清除怎么办

canvas绘图是在onDraw里触发的。而每次onDraw的时候,其实是重新绘制canvas数据的,也就是如果你什么都不画,canvas上就没有东西了。因此你只要在每次触发onDraw之后,把需要画的内容画出来即可。比如,假设人头的数据是bitmapHead,两种发型分别是bitmapStyle1, bitmapStyle 2,你就可以这样画(伪代码):

java">intcurrentType=0;
onDraw(canvas){
canvas.draw(bitmapHead);//这个是必定要画的
switch(currentType){
caseSTYLE1:
canvas.draw(bitmapStyle1);
break;
caseSTYLE2:
canvas.draw(bitmapStyle2);
break;
}
}

㈢ DrawArc()方法如何使用

安卓方法DrawArc()用于在画布上绘制圆弧,主要方法是通过指定圆弧所在的椭圆对象、起始角度、终止角度来实现。

1. 基本语法:

public void drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

参数说明

oval:圆弧所在的椭圆对象。

startAngle:圆弧的起始角度。

sweepAngle:圆弧的角度。

useCenter:是否显示半径连线,true表示显示圆弧与圆心的半径连线,false表示不显示。

paint:绘制时所使用的画笔。

注意:Rect类使用需要小心,详见文末附注。

2. 示例

以下代码示范了如何在画布上绘制圆弧:

protectedvoidonDraw(Canvascanvas){ //TODOAuto-generatedmethodstub super.onDraw(canvas); paint.setAntiAlias(true);//设置画笔为无锯齿 paint.setColor(Color.BLACK);//设置画笔颜色 canvas.drawColor(Color.WHITE);//白色背景 paint.setStrokeWidth((float)3.0);//线宽 paint.setStyle(Style.STROKE); RectFoval=newRectF();//RectF对象 oval.left=100;//左边 oval.top=100;//上边 oval.right=400;//右边 oval.bottom=300;//下边 canvas.drawArc(oval,225,90,false,paint);//绘制圆弧 //RectFoval=newRectF();//RectF对象 oval.left=100;//左边 oval.top=400;//上边 oval.right=400;//右边 oval.bottom=700;//下边 canvas.drawArc(oval,200,135,true,paint);//绘制圆弧 }

代码中,首先设置了Paint画笔的颜色,并设置Canvas画布为白色背景。接着设置画笔的线宽以及空心效果。然后,定义一个RectF对象,并设置了坐标,调用drawArc方法绘制第一个圆弧,此处设置为不显示半径连线。最后,重新设置了RectF对象坐标,调用drawArc方法绘制第二个圆弧,此例显示半径连线。运行代码,可在手机屏幕上看到下图图所示显示效果。

---------------

附注:

Android中的Rect类——奇葩的思维

最近在工作中遇到了一些问题,总结下来就是Android中Rect这个类造成的。不得不说,不知道Android SDK的开发人员是怎么想的, 这个类设计的太奇葩了。首先介绍一下Rect类:Rect类主要用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作。这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom),你也可以获取一个Rect实例的Width和Height。就在这里,奇葩的事情来了,作为一个有一点经验的做图像或者矩阵运算或者编程程序员来说,大家的共识是,如果一个矩阵是MxN的,也就是M行N列,那么行号是[0,M-1],列号是[0,N-1]。可是奇葩的Rect类并不是这样的!如果你这么声明一个Rect类:

Rect rect=newRect(100,50,300,500);

那么右下角(300,500)其实是不在这个矩形里面的,但是左上角(100,50)在,也就是说,这个矩形实际表示的区域是:(100,50,299,499)。另外,Rect计算出的Height和Width倒是对的。所以,在此告诫各位程序员,在涉及Rect运算的时候,尽量不要使用它的右下角左边,即right和bottom。因为他们是错的。当然,在你调用android自己的函数时,是可以使用的,因为Android里面一直保持这么奇葩的思维。

㈣ Android绘图之Canvas变换(6)

前面讲解了Canvas的基本概念, Android绘图之Canvas概念理解(5) ,
对Canvas的概念进行了分析,但是没有说明和屏幕的关系,Canvas不等于屏幕,屏幕不会动的,我们也无法对屏幕进行(平移,缩放等)操作,只能对Canvas进行操作,所以对Canvas进行操作,屏幕不动,最终会导致看到的图像不同。

下面开始讲解Canvas的变幻操作:
包括:translate,rotate,scale,skew,clip,clipout,matrix

先从最简单的平移开始:

对Canvas进行平移,
dx: x轴方向进行平移,正值向屏幕右侧
dy:y轴方向进行平移,正值向屏幕下方

绘制两个点查看原点位置。

原点显然改变了,以后再绘制任何形状都是以translate后的原点开始绘制。

参数说明
sx:横向的缩放,默认为1,小数缩小,整数放大
sy:纵向的缩放,默认为1,小数缩小,整数放大

px,py,看源码知道是先translate,执行sx,sy然后再translate反方向。
第二次translate的坐标为(-px sx,-px sy),最终的效果就是px,py是缩放后不动的点。

缩放后坐标减半。

如果想控制缩放后的位置,如何控制呢,这就需要第二个函数。

还可以控制其他位置,例如控制缩放后在中心。

rotate有两个函数:
rotate(float degrees)
rotate(float degrees, float px, float py)
Degree:旋转的角度,正值为顺时针,负值为逆时针
Px,py:旋转的中心,如果不指定旋转中心默认为(0,0)点

指定旋转中心为矩形中心

参数说明:
sx:画布在x方向上倾斜相应的角度,sx倾斜角度的tan值,
sy:画布在y轴方向上倾斜相应的角度,sy为倾斜角度的tan值,

根据矩形或者路径裁剪画布,画布被切割之后,只有部分区域可用,其他区域无法绘制内容。
Clip函数切割的区域可用,clipOut未被切割的区域可用。(过时函数不再讲解)

Matrix提供了一些方法来控制变换:

android绘图之Paint(1)
android绘图之Canvas基础(2)
Android绘图之Path(3)
Android绘图之drawText绘制文本相关(4)
Android绘图之Canvas概念理解(5)
Android绘图之Canvas变换(6)
Android绘图之Canvas状态保存和恢复(7)
Android绘图之PathEffect (8)
Android绘图之LinearGradient线性渐变(9)
Android绘图之SweepGradient(10)
Android绘图之RadialGradient 放射渐变(11)
Android绘制之BitmapShader(12)
Android绘图之ComposeShader,PorterDuff.mode及Xfermode(13)
Android绘图之drawText,getTextBounds,measureText,FontMetrics,基线(14)
Android绘图之贝塞尔曲线简介(15)
Android绘图之PathMeasure(16)
Android 动态修改渐变 GradientDrawable

㈤ 求Android中canvas.drawPicture(p);的使用方法求一个简单的实例

这个可能稍微复杂一点,但是非常实用:


{


DrawingViewdv;

privatePaintmPaint;

=null;


@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

dv=newDrawingView(this);

setContentView(dv);

mPaint=newPaint();

mPaint.setAntiAlias(true);

mPaint.setDither(true);

mPaint.setColor(Color.GREEN);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeJoin(Paint.Join.ROUND);

mPaint.setStrokeCap(Paint.Cap.ROUND);

mPaint.setStrokeWidth(12);

}


{


publicintwidth;

publicintheight;

privateBitmapmBitmap;

privateCanvasmCanvas;

privatePathmPath;

privatePaintmBitmapPaint;

Contextcontext;

privatePaintcirclePaint;

privatePathcirclePath;


publicDrawingView(Contextc){

super(c);

context=c;

mPath=newPath();

mBitmapPaint=newPaint(Paint.DITHER_FLAG);

circlePaint=newPaint();

circlePath=newPath();

circlePaint.setAntiAlias(true);

circlePaint.setColor(Color.BLUE);

circlePaint.setStyle(Paint.Style.STROKE);

circlePaint.setStrokeJoin(Paint.Join.MITER);

circlePaint.setStrokeWidth(4f);


}


@Override

protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){

super.onSizeChanged(w,h,oldw,oldh);


mBitmap=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);

mCanvas=newCanvas(mBitmap);


}

@Override

protectedvoidonDraw(Canvascanvas){

super.onDraw(canvas);


canvas.drawBitmap(mBitmap,0,0,mBitmapPaint);


canvas.drawPath(mPath,mPaint);


canvas.drawPath(circlePath,circlePaint);

}


privatefloatmX,mY;

privatestaticfinalfloatTOUCH_TOLERANCE=4;


privatevoidtouch_start(floatx,floaty){

mPath.reset();

mPath.moveTo(x,y);

mX=x;

mY=y;

}

privatevoidtouch_move(floatx,floaty){

floatdx=Math.abs(x-mX);

floatdy=Math.abs(y-mY);

if(dx>=TOUCH_TOLERANCE||dy>=TOUCH_TOLERANCE){

mPath.quadTo(mX,mY,(x+mX)/2,(y+mY)/2);

mX=x;

mY=y;


circlePath.reset();

circlePath.addCircle(mX,mY,30,Path.Direction.CW);

}

}

privatevoidtouch_up(){

mPath.lineTo(mX,mY);

circlePath.reset();

//committhepathtoouroffscreen

mCanvas.drawPath(mPath,mPaint);

//killthissowedon'tdoubledraw

mPath.reset();

}


@Override

publicbooleanonTouchEvent(MotionEventevent){

floatx=event.getX();

floaty=event.getY();


switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

touch_start(x,y);

invalidate();

break;

caseMotionEvent.ACTION_MOVE:

touch_move(x,y);

invalidate();

break;

caseMotionEvent.ACTION_UP:

touch_up();

invalidate();

break;

}

returntrue;

}

}

}


你的手指到哪里,Canvas就画到哪里。图:

㈥ android中使用canvas.drawText函数可否设置旋转

使用Paint类的breakText对Text进行分解 然后分别使用Canvas的drawText进行绘制

阅读全文

与androidcanvas扇形相关的资料

热点内容
如何判断是否可以通过编译 浏览:925
卫士通加密官网 浏览:51
程序员需要会盲打么 浏览:446
编译c无法识别unsighed 浏览:433
怎么给几年前的安卓机强行刷机 浏览:316
天方地圆制作算法 浏览:193
算法失效分析 浏览:760
gcc编译选项给gdb调试 浏览:590
ios和android前景好 浏览:66
苹果如何蓝牙传送安卓app 浏览:552
方舟编译器mod怎么用 浏览:762
服务器地址栏在哪里 浏览:397
做安检还是程序员好 浏览:529
程序员最火的bug 浏览:938
腾讯文件夹英文怎么写 浏览:127
pdf内码 浏览:434
微信小程序文件夹怎么发给好友 浏览:972
java不能被继承的类 浏览:163
苹果app网址怎么添加 浏览:910
php明年的今天 浏览:115