Android 如何在活动类中使用视图扩展类的画布?

Android 如何在活动类中使用视图扩展类的画布?,android,android-canvas,Android,Android Canvas,我创建了一个类: 公共类TestCanvas扩展视图{ 公共测试画布(上下文){ 超级(上下文); } @凌驾 受保护的void onDraw(画布){ super.onDraw(帆布); 油漆=新油漆(); 油漆。设置颜色(颜色。红色); 画布.绘图文本(“kal”,0,100,绘画); canvas.save(); } } 现在我从活动中调用该类: 公共类测试活动扩展活动{ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(

我创建了一个类:

公共类TestCanvas扩展视图{
公共测试画布(上下文){
超级(上下文);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆=新油漆();
油漆。设置颜色(颜色。红色);
画布.绘图文本(“kal”,0,100,绘画);
canvas.save();
}
}
现在我从活动中调用该类:

公共类测试活动扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TestCanvas tcanvas=新的TestCanvas();
frameLayout=(frameLayout)findviewbyd(R.id.frameLayout1);
frameLayout.addView(tcanvas);
}
}

现在我想将canvas放入活动类并设置为ImageView。我该怎么做?

您需要从
视图继承自己的类,并重写
onDraw()
onMeasure()
。就像您开始使用
TestCanvas
一样。例如:

package com.yourapphere;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Paint.Style;
导入android.util.AttributeSet;
导入android.view.view;
公共类TwoDee扩展视图{
私人英特姆维兹;
私营机构;
公共TwoDee(上下文){
超级(上下文);
}
公共TwoDee(上下文,属性集属性){
super(上下文,attribs);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆=新油漆();
油漆。设置颜色(颜色。灰色);
油漆.设置样式(样式.填充);
帆布.拉丝漆(油漆);
油漆。设置颜色(颜色。蓝色);
帆布。抽绳(0,0,毫米宽,毫米高,油漆);
帆布.抽绳(宽度,0,0,高度,油漆);
油漆。设置颜色(颜色。红色);
画布。绘图文本(“0卡尔”,50,85,油漆);
canvas.save();
}
@凌驾
测量时的保护空隙(内部宽度测量等级、内部高度测量等级){
mWidth=视图.MeasureSpec.getSize(widthMeasureSpec);
mHeight=View.MeasureSpec.getSize(heightMeasureSpec);
设置测量尺寸(米宽,米高);
}
}

将自定义视图添加到活动的xml布局中,如下所示



你的活动课中没有任何内容。就这样

如果确实需要使用ImageView:从
ImageView
而不是
view
继承自定义视图。然后将活动布局xml中相应的ImageView标记替换为自定义ImageView,如
com.yourapphere.MyImageView


参考资料和链接
参见类似问题:
简单自定义视图示例代码:

了解Android 2D绘图:
Android 2D编码教程:

简单2D游戏教程:

这里有一个解决方案,适用于那些有相同问题的人

public class TestActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TestCanvas tcanvas=new TestCanvas();

    frameLayout=(FrameLayout)findViewById(R.id.frameLayout1);
    frameLayout.addView(tcanvas);

    Bitmap bitmap=Bitmap.createBitmap(440,587,Bitmap.Config.ARGB_8888);
    Canvas c=new Canvas(bitmap);
    tcanvas.draw(bitmap);

    //now i use bitmap at for any use.......

  }
}  

是否要将画布设置为某个
ImageView
元素?或者您只想在
R.id.frameLayout1
中显示画布?我想将画布设置为一个图像视图…您只想在特定视图内的屏幕上绘制吗?因为它不必是ImageView,所以可以是任何自定义视图。为什么需要使用ImageView?对此有什么特殊要求吗?现在,我如何从自定义视图中获取位图?如果这有助于解决您的问题,请您投票并接受此答案好吗?