android二维位图绘制
有人能告诉我为什么我不能像这样在我的surfaceView上添加位图吗android二维位图绘制,android,animation,bitmap,drawing,Android,Animation,Bitmap,Drawing,有人能告诉我为什么我不能像这样在我的surfaceView上添加位图吗 steering = new Steering(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), getWidth()-50,getHeight()-50); final int width = getWidth(); final int height = getHeight(); final Bitmap bitmap =
steering = new Steering(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), getWidth()-50,getHeight()-50);
final int width = getWidth();
final int height = getHeight();
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
steering = new Steering(bitmap, width-50,height-50);
myView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//Do something here since now you have the width and height of your view
}
});
如果我使用整数而不是“getHeight()”-方法,则位图添加得很好。但是因为我想让这个游戏在一部以上的手机上运行而不显得奇怪,所以我想用这两种方法添加它
有人能帮忙吗
谢谢 您到底在哪里添加该行?如果它在您的
onCreate
上,则它不会向您显示图像,因为方法getWidth()
和getHeight()
将返回0。因此,要绘制它,您必须等待系统实际创建视图。
要测试您是否实际收到了一个值,请尝试更改您实际拥有的代码,如下所示:
steering = new Steering(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), getWidth()-50,getHeight()-50);
final int width = getWidth();
final int height = getHeight();
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
steering = new Steering(bitmap, width-50,height-50);
myView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//Do something here since now you have the width and height of your view
}
});
并在转向管路上添加断点并对其进行调试。如果宽度和高度为0,则必须等待视图绘制
编辑:
在活动中
/片段
可以添加如下树观察者:
steering = new Steering(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), getWidth()-50,getHeight()-50);
final int width = getWidth();
final int height = getHeight();
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
steering = new Steering(bitmap, width-50,height-50);
myView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//Do something here since now you have the width and height of your view
}
});
下面是一个小例子,说明你在课堂上是如何做到这一点的:
我的驾驶课:
我的活动
和我的观点类
public class MyView extends View{
Steering steering = null;
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setObject(Steering steering){
this.steering = steering;
}
final Paint paint = new Paint();
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
if(steering!=null){
canvas.drawBitmap(steering.getBitmap(), 0, 0, paint);
}
canvas.restore();
}
}
您可以将其用于普通视图或surfaceView,无论哪种方式都可以。
抱歉,如果答案有点太长:P那么在构造函数中使用这些方法是没有办法的?不,但是在您的活动中,您可以使用treeobserver。。我刚刚为你更新了我的答案:)谢谢你的帮助,但是我也不能让它工作,所以我对android编程是新手。但无论如何还是要感谢:)只需在类上添加一个扩展视图的setMethod。我将尽可能快地编辑我的答案,给你们展示一个例子。哇,非常感谢你们,比我预想的要多得多,这将非常有帮助:)