Android开发--Canvas高级使用

来源:互联网 发布:淘宝假货店铺名单2017 编辑:程序博客网 时间:2024/05/17 03:21
1.绘制路径

  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);
}
}

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

测试结果: