Android中的Canvas(一)

大家都知道在我们要显示一个自己定义的View有2中方法,第一种:是直接new一个我们的View对象并且setContentView(myView);假如我们自己定义的View对象叫myView其实我们在Activity里边就2行代码就搞定了

MyViewmyView=newMyView(this);

setContentView(myView);

第二种方式就是把它放到我们的布局文件中,例如这样

<eoe.demo.MyView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

其中eoe.demo是我们的包名。用这种方式必须在我们自定义的View类也就是MyView里边加上这样个构造方法

Java代码:

publicMyView(Contextcontext,AttributeSetattributeSet){

super(context,attributeSet);

}

packageeoe.demo;

importandroid.app.Activity;

importandroid.os.Bundle;

publicclasstestActivityextendsActivity{

privatetestViewmTestview;

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTestview=(testView)findViewById(R.id.testView);

mTestview.initBitmap(320,240,0xcccccc);

}

}

<?xmlversion="1.0"encoding="utf-8"?>

<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<testView

android:id="@+id/testView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

tileSize="12"/>

</FrameLayout>

testView类这个类就是我们自己定义的View类了这里我们把它放在布局文件中加载进来

packageeoe.demo;

importandroid.content.Context;

importandroid.graphics.Bitmap;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Matrix;

importandroid.graphics.Paint;

importandroid.graphics.Typeface;

importandroid.graphics.Bitmap.Config;

importandroid.util.AttributeSet;

importandroid.view.View;

publicclasstestViewextendsView{

privateBitmapmbmpTest=null;

privatefinalPaintmPaint=newPaint();

privatefinalStringmstrtitle="感受Android带给我们的新体验";

publictestView(Contextcontext,AttributeSetattrs,intdefStyle){

super(context,attrs,defStyle);

mPaint.setColor(Color.GREEN);

}

publictestView(Contextcontext,AttributeSetattrs){

super(context,attrs);

mPaint.setColor(Color.GREEN);

}

publicbooleaninitBitmap(intw,inth,intc){

//返回具有指定宽度和高度可变的位图,它的初始密度可以调用getDensity()

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

//把一个具有指定的位图绘制到画布上。位图必须是可变的。

//在画布最初的目标密度是与给定的位图的密度相同,返回一个具有指定位图的画布

Canvascanvas=newCanvas(mbmpTest);

//设置画布的颜色

canvas.drawColor(Color.WHITE);

Paintp=newPaint();

Stringfamilyname="宋体";

Typefacefont=Typeface.create(familyName,Typeface.BOLD);

p.setColor(Color.RED);

p.setTypeface(font);

p.setTextSize(22);

//0,100指定文字的起始位置

canvas.drawText(mstrTitle,0,100,p);

returntrue;

}

@Override

publicvoidonDraw(Canvascanvas){

super.onDraw(canvas);

if(mbmpTest!=null){

Matrixmatrix=newMatrix();

//matrix.postScale(0.5f,0.5f);

//以120,120这个点位圆心旋转90度

//matrix.setRotate(90,120,120);

//使用指定的矩阵绘制位图

canvas.drawBitmap(mbmpTest,matrix,mPaint);

}

}

}

相关推荐