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?对此有什么特殊要求吗?现在,我如何从自定义视图中获取位图?如果这有助于解决您的问题,请您投票并接受此答案好吗?