在我的应用程序中,我需要知道主要活动容器的大小。我写了以下代码:
Button btnActionMenu = (Button) findViewById(R.id.actionbar_menu);
btnActionMenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int width = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
RelativeLayout rlContainer = (RelativeLayout) findViewById(R.id.inner_content);
Bitmap bitmap = Bitmap.createBitmap(rlContainer.getLayoutParams().width, rlContainer.getLayoutParams().height, Config.ARGB_8888);//
Canvas canvas = new Canvas(bitmap);
rlContainer.draw(canvas);
SlideoutHelper.setBitmap(bitmap, width);
startActivity(new Intent(Home.this, MenuActivity.class));
overridePendingTransition(0, 0);
}
});
rlContainer
是活动的根容器。当我运行并单击按钮时,应用程序崩溃,Logcat说“应用程序空指针异常”并指向行
Bitmap bitmap = Bitmap.createBitmap(rlContainer.getLayoutParams().width, rlContainer.getLayoutParams().height, Config.ARGB_8888);
任何建议将不胜感激。感谢
答案 0 :(得分:0)
试试这个:
v.measure(
MeasureSpec.makeMeasureSpec(v.getLayoutParams().width,MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(v.getLayoutParams().height, MeasureSpec.EXACTLY));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight()
,Bitmap.Config.RGB_565);
答案 1 :(得分:0)
您是否尝试过getMeasuredHeight和getMeasuredWidth,或者getHeight和getWidth(在rlContainer变量上)?
请注意,这仅在视图准备好后才有效,而不是在onCreate()方法中。但是,它将适用于这种情况,因为它在用户相关的操作中,这在向用户显示视图之后发生。
btw,关于你的代码,“rlContainer.getLayoutParams()。width”可能会返回一个负值,以防它是wrap-content或match-parent。