android:如何用canvas在自定义view里画图

各位大神们好,小弟为android初学者,请赐教。我现在有一个xml文件,里面有两个自定义的view,代码如下。XMLcode<LinearLayoutandroid:o... 各位大神们好,小弟为android初学者,请赐教。
我现在有一个xml文件,里面有两个自定义的view,代码如下。
XML code
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<com.android.imgTest1120.iniView01 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#ef3"
android:id="@+id/img01"/>
<com.android.imgTest1120.iniView01 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#E8A2B4"
android:id="@+id/img02"/>
</LinearLayout>

我的activity是用canvas往这里面画图,希望在每个view中画一个居于中心的圆,但是代码无法运行,总是崩溃,希望大家能帮助我,这是代码。
Java code
public class ImgTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

private class iniView01 extends View {

public iniView01(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//set background color
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
canvas.drawCircle(this.getWidth()/2, this.getHeight()/2, 30, paint);
}

}
}

在此感谢大家的帮助。
展开
 我来答
百度网友1a235aba15
推荐于2016-04-14 · 超过80用户采纳过TA的回答
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:121万
展开全部
做安卓开发的话,不会自定义view是不行的,自定定义各种控件以满足开发需求,在开发中是很重要的,自定义view通过继承view,通过重写ondraw方法实现重绘自己所需要的控件样式。

在ondraw方法中,通过canvas来绘制想要的样式,首先需要定义好画笔,以及画笔的各种属性,比如需要的时候要抗锯齿等等。都准备好了就可以用canvas来实现绘图了,当然api提供的api肯定是不够用的,需要多姿多彩的样式很多时候需要借助准备好的一些图片,通过canvas绘制bitmap来实现把准备好的图片绘制上去。绘制好了当然还是不够的,控件都是需要和用户交互的,所以很多时候样式是会发生改变的,所以要在其中定义相关方法暴露出来,方法中处理用户操作或其他的结果改变样式的重绘,绘制好了调用更新(invalidate())方法,实现样式的改变。做好一个控件还需要优化性能等等,都需要一步一慢慢实现。
BAXIA_X
2011-11-26
知道答主
回答量:2
采纳率:0%
帮助的人:3080
展开全部
将构造函数改成这个试试
public iniView01(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
本人在写的时候也遇到过代码没问题,但是一到虚拟机里面运行就崩了,然后将构造函数改成这个就不会了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
O0O0OO0OO0O0O
2011-11-24 · TA获得超过226个赞
知道答主
回答量:236
采纳率:0%
帮助的人:121万
展开全部
坐标
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式