Canvas类中也提供了绘制路径的功能,通过canvas.drawPath方法,可以画出封闭路径和开放路径,并可以再路径上实现一些特殊的效果。
------------------------------------------------------------------------------
public void drawPath (Path path, Paint paint);
参数:
path:指被画的Path
paint:指被画图的画笔
--------------------------------------------------------------------------
代码示例:
-----------------------------------------------------------------------
package com.example.canvas;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.SeekBar;
public class CanvasAdvance extends View{
Paint paintPath=new Paint();
public CanvasAdvance(Context context) {
super(context);
// TODO Auto-generated constructor stub
paintPath.setColor(Color.BLUE);
}
protected void onDraw(Canvas canvas){
canvas.drawPath(makeFollowPath(), paintPath);
}
private Path makeFollowPath(){
Path path=new Path();
path.moveTo(0, 0);
for(int i=1;i<=15;i++){
path.lineTo(i*20, (float)Math.random()*70);
}
return path;
}
}
测试代码:
package com.example.canvas;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.SeekBar;
public class MainActivity extends Activity {
CanvasAdvance canvasPoint=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
canvasPoint=new CanvasAdvance(this);
setContentView(canvasPoint);
}
}
测试结果:
2.绘制位图
在Canvas上面绘制位图的方法有如下两种:
--------------------------------------------------------------------------------------------------------------------
直接绘制Bitmap对象:通过BitmapFactory类的各种方法可以从不同资源创建Bitmap对象。
使用Drawable类中的draw方法绘制位图:调用Drawable下的draw方法即可
--------------------------------------------------------------------------------------------------------------------
代码示例:
-------------------------------------------------------------------------------------------------------------------
package com.example.canvas;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.view.View;
public class CanvasBitmap extends View{
private Bitmap bitmap;
Matrix matrix=null;
Drawable drawable=null;
public CanvasBitmap(Context context) {
super(context);
// TODO Auto-generated constructor stub
matrix =new Matrix();
InputStream is=context.getResources().openRawResource(R.drawable.picturetwo);
bitmap = BitmapFactory.decodeStream(is);
drawable=context.getResources().getDrawable(R.drawable.picturethree);
drawable.setBounds(50, 100, 150, 300);
}
protected void onDraw(Canvas canvas){
matrix.setRotate(45,100,200);
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap, 150,200, null);
drawable.draw(canvas);
}
}
-------------------------------------------------------------------------------------------
测试结果: