小记 :surfaceView
程序员文章站
2022-03-11 22:33:18
...
知道了draw bitmap的用法
未来解决一些ui线程里处理可能压力挺大的 可以再非ui线程里去执行
需要去写x和y,本以为就写宽度和高度就行了
@Override
public void draw(Canvas canvas) {
rectF.set(x,y,x+mWidth,y+mHeight);
canvas.drawBitmap(bitmap,null,rectF,null);
}
x和y不设置就是0
public Challenger(Context context, int gameWidth, int gameHeight, Bitmap bitmap) {
super(context, gameWidth, gameHeight, bitmap);
x= (int) (gameWidth*RADIO_X_PRO);
mWidth=Utils.dp2px(context,50);
mHeight=gameHeight/2;
//x和y都要设置
//这样设置会报错 且没用,就是等于0 要么常量声明,就mheight*1/2是可以的
// y=1/2*mHeight;
}
@Override
public void draw(Canvas canvas) {
canvas.save();
//传入的x是负值所以就会再屏幕的外面所以要保持全绘制就有加大宽度的设置 因为x是负的所以下面是符号变成正的
//里面必写右边界和下边界必写x和y 因为他们是考虑x和y的坐标后平移多少
canvas.translate(x,y);
mpaint.setShader(bitmapShader);
canvas.drawRect(x,0,-x+GameWidth,GameHeight-y,mpaint);
private void logic() {
//我懂了 就是说其实他就是干了一件事,扩大了描绘的范围 而不是所缩小
floor.setX(floor.getX()-speed);
mTmpBirdDis+=mAutoDownDis;
bird.setY(bird.getY()+mTmpBirdDis);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int acion=event.getAction();
if (acion==MotionEvent.ACTION_DOWN){
mTmpBirdDis=mBirdupDis;
}return true;
}