My Circle Class !!
public class Circle extends View{
int y =0 ;
public line(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
protected void onDraw(Canvas c){
super.onDraw(c);
Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.BLUE);
p.setStrokeWidth(3);
if (y==0){
c.drawCircle(100,y+5,50,p);
}
else{
c.drawCircle(100,y+5,50,p);
}
}
public void invalidate(){
invalidate();
}
和MainActivity !!
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout rl=new RelativeLayout(this);
setContentView(rl);
rl.setBackgroundResource(R.drawable.ic_launcher);
Circle c=new Circle(this);
rl.addView(c);
Timer t=new Timer();//here is Where I need help
t.schedule(new MyNewTimer(),0,20);//here is Where I need help
}
@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;
}
}
我从一些网站获得了计时器的想法。我是android编程的初学者。我真的不知道如何用计时器移动这个形状。实际上,我不知道在哪里放这个时间任务以及在哪里放置移动! 请帮助我!!
我在onCreate()
上添加了这个Timer timer = new Timer();
timer.schedule(new MyTimer(),0,20);
我创建MyTimer类
public class MyTimer extends TimerTask{
@Override
public void run(){
handler.post(new Runnable(){
public void run(){
//Here, I can't inherit circle.invalidate()
}
}};
}
答案 0 :(得分:0)
在后台线程中,您需要为postInvalidate()
调用View
而不是invalidate()
(必须在UI线程上调用)。你可以做这样的事情:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout rl=new RelativeLayout(this);
setContentView(rl);
rl.setBackgroundResource(R.drawable.ic_launcher);
final Circle c = new Circle(this);
rl.addView(c);
Timer t=new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// update the y coordinate in c
. . .
// ask for the view to be redrawn
c.postInvalidate();
}
};
t.schedule(task, 0, 20);
}
}
请注意,c
必须在此代码中声明为final
,以便可以从匿名TimerTask
对象中引用它。如果您创建了一个单独的类(例如MyNewTimer
),那么您可以在构造函数中传递对c
的引用,以便它可以访问该视图。
正如我在评论中指出的那样,Circle
还有其他问题。我首先要删除您编写的invalidate
方法。