0

在我的应用程序中,我需要知道主要活动容器的大小。我写了以下代码:

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);

任何建议将不胜感激。谢谢

4

2 回答 2

0

您是否尝试过 getMeasuredHeight 和 getMeasuredWidth 或 getHeight 和 getWidth (在 rlContainer 变量上)?

请注意,这仅在视图准备好后才有效,而不是在 onCreate() 方法中。但是,它会在这种情况下工作,因为它位于与用户相关的操作中,该操作发生在向用户显示视图之后。

顺便说一句,关于您的代码,“rlContainer.getLayoutParams().width”可能会返回负值,以防它是 wrap-content 或 match-parent 。

于 2012-05-12T20:18:27.243 回答
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);
于 2012-05-12T19:19:07.460 回答