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