本帖最后由 copico 于 2011-05-19 22:28:01 编辑

解决方案 »

  1.   

    什么错,描述下,现在你的代码错误比较多,首先类名大小写注意下啊,private viewexample v1 = new viewexample(drawtest.this)这个实例化的时候最好放在onCreate里面
    还有你的ViewGroup写了等于没写
    运行出来肯定还是显示R.layout.main里面的布局
      

  2.   

    首先你的布局貌似没弄好。你可以直接把你的view设置成Activity01中的布局,如:setContentView(view);其次,你圆的x,y 坐标压根就没变化,你叫它怎么移动哦!给你个实例:   Activity01:
              
             import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.KeyEvent;
    import android.view.MotionEvent;public class Activity01 extends Activity
    {
    private static final int REFRESH = 0x000001;

    /* 声明GameView类对象 */
    private GameView mGameView = null; /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState); /* 实例化GameView对象 */
    this.mGameView = new GameView(this); // 设置显示为我们自定义的View(GameView)
    setContentView(mGameView); // 开启线程
    new Thread(new GameThread()).start();
    } Handler myHandler = new Handler() 
    {
    //接收到消息后处理
    public void handleMessage(Message msg)
    {
    switch (msg.what)
    {
    case Activity01.REFRESH:
    mGameView.invalidate();
    break;
    }
    super.handleMessage(msg);
    }
    }; class GameThread implements Runnable
    {
    public void run()
    {
    while (!Thread.currentThread().isInterrupted())
    {
    Message message = new Message();
    message.what = Activity01.REFRESH;
    //发送消息
    Activity01.this.myHandler.sendMessage(message);
    try
    {
    Thread.sleep(100);
    }
    catch (InterruptedException e)
    {
    Thread.currentThread().interrupt();
    }
    }
    }
    }
    /**
     * 当然可以将GameThread类这样写
     * 同样可以更新界面,并且不在需要
     * Handler在接受消息
    class GameThread implements Runnable
    {
    public void run()
    {
    while (!Thread.currentThread().isInterrupted())
    {
    try
    {
    Thread.sleep(100);
    }
    catch (InterruptedException e)
    {
    Thread.currentThread().interrupt();
    }
    //使用postInvalidate可以直接在线程中更新界面
    mGameView.postInvalidate();
    }
    }
    }
    */

    //详细事件处理见第三章
    //当然这些事件也可以写在GameView中
    //触笔事件
    public boolean onTouchEvent(MotionEvent event)
    {
    return true;
    }

    //按键按下事件
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
         return true;
        }
        
    //按键弹起事件
    public boolean onKeyUp(int keyCode, KeyEvent event)
    {
    switch (keyCode)
    {
    //上方向键
    case KeyEvent.KEYCODE_DPAD_UP:
    mGameView.y-=3;
    break;
    //下方向键
    case KeyEvent.KEYCODE_DPAD_DOWN:
    mGameView.y+=3;
    break;
    }
    return false;
    }

    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
    {
    return true;
    }
    }
    GameView.java:
      
              
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;public class GameView extends View
    {
    int  miCount = 0;
    int  y = 0;
    public GameView(Context context)
    {
    super(context);
    }
    //
    //具体绘图内容我们紧接着就会讲
    public void onDraw(Canvas canvas)
    {
    if (miCount < 100)
    {
    miCount++;
    }
    else 
    {
    miCount = 0;
    }
    //绘图
    Paint mPaint = new Paint();   
            switch (miCount%4)
    {
    case 0:
    mPaint.setColor(Color.BLUE);  
    break;
    case 1:
    mPaint.setColor(Color.GREEN);  
    break;
    case 2:
    mPaint.setColor(Color.RED);  
    break;
    case 3:
    mPaint.setColor(Color.YELLOW);  
    break;
    default:
    mPaint.setColor(Color.WHITE);  
    break;

            //绘制矩形--后面我们将详细讲解
            canvas.drawRect((320-80)/2, y, (320-80)/2+80, y+40, mPaint); 
    }
    }以上参考,希望有所帮助!     
      

  3.   

    不过代码放在Message message = new Message();
    message.what = Activity01.REFRESH;
    //发送消息
    Activity01.this.myHandler.sendMessage(message);看起来 方便
      

  4.   

    谢谢大家,问题已解决,主要问题还是
    mGameView.postInvalidate();
    mGameView.invalidate();
    这两个东西,二楼提供的代码很有用
    一楼指导的对,受教受教
    谢谢了,结帖