View的使用方法

View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。在Android中,任何一个View类都只需要重写onDraw()方法来实现界面显示。自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式。Android中提供了invalidate方法来实现界面的刷新,注意,invalidate不能直接在线程中调用,因为他违背了单线呈模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中执行,因此Android中最长用的方法是利用Handler来实现UI线程的更新


1.写一个类继承View类,一般要重写ondraw方法。一般而言我们去自己绘制一个view,在另一个activity中setContentView(view)去引用它。


public class GameView extends View {
    static int count = 0 ;
    static int y  = 0;
    public GameView(Context context) {
        super(context);
        
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (count<100) {
            count++;
        }
        else {
            count = 0 ;
        }
        Paint paint = new Paint();
        switch (count%4) {
        case 0:
            paint.setColor(Color.BLUE);
            break;

        case 1:
            paint.setColor(Color.RED);
            break;
        case 2:
            paint.setColor(Color.GRAY);
            
            break;
        case 3:
            paint.setColor(Color.GREEN);
            break;
        }
        canvas.drawRect((320-80)/2, y, (320-80)/2+80, y+40, paint);
        super.onDraw(canvas);
    }
    
    
}

2

写一个activity。

public class ViewTestActivity extends Activity {
    /** Called when the activity is first created. */
    public static GameView gameView;
    public static Handler handler  =  new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what  ==11) {
                    
                }
                super.handleMessage(msg);
            }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gameView = new GameView(this);
        setContentView(gameView);
        new Thread(new GameThread()).start();
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_DOWN:
            GameView.y+= 3;
            break;

        case KeyEvent.KEYCODE_DPAD_UP:
            GameView.y-=3;
            break;
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return true;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return true;
    }
}

class GameThread implements Runnable{

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
                Thread.currentThread().interrupt();
                
            }
            ViewTestActivity.gameView.postInvalidate();//使用postnvalidate可以直接在线程中更新界面
        }
    }
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值