android invalidate()调用onDraw()引起重绘。这段代码为何无法运行?

publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInst... public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new View(null){
Paint paint=new Paint();
int i =0;
public void onDraw(Canvas canvas){
super.onDraw(canvas);

// 设定绘图样式
paint.setColor( 0xff00ffff ); //画笔颜色
paint.setAntiAlias( true ); //反锯齿
paint.setStyle( Paint.Style.STROKE );

// 绘制一个弧形
canvas.drawArc(new RectF(60, 120, 260, 320), 0, i, true, paint );

// 弧形角度
if( (i+=10) > 360 )
i = 0;

// 重绘, 再一次执行onDraw 程序
invalidate();

}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
展开
 我来答
匿名用户
2014-02-05
展开全部
问题在于invalidate函数根本没被调用
你在if语句中调用此方法,注定其最多只能被调用一次,且是在满足条件的情况下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陌生人之星空
2014-02-05 · 超过33用户采纳过TA的回答
知道答主
回答量:173
采纳率:100%
帮助的人:44.3万
展开全部
setContentView(new View(null){。。。});改成setContentView(new View(this){。。。});试试。
追问
这样就能运行了,可是为什么呀?
追答
看View类的构造器,有一个View(Context context) 。你把它设成null了,所以不能运行。context从字面意思就可以知道,是表示上下文。就是你新建的匿名内部类所在的环境,由于Activity继承了context 所以view(this)就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式