【发布时间】:2020-06-28 20:23:04
【问题描述】:
我正在尝试从视图中绘制位图,因为我想模糊该位图并将其用作后续活动的背景。 Logcat 给我:
NullPointerException at android.graphics.Bitmap.createBitmap(Bitmap.java:484)
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from activity_main.xml
setContentView(R.layout.activity_splash_page);
ProgressWheel wheel = (ProgressWheel) findViewById(R.id.progress_wheel);
wheel.setClickable(false);
TextView touch = (TextView) findViewById(R.id.touch_splash);
touch.setClickable(false);
TextView level = (TextView) findViewById(R.id.level_splash);
level.setClickable(false);
wheel.setProgress(0.7f);
wheel.setClickable(true);
touch.setClickable(true);
level.setClickable(true);
RelativeLayout view = (RelativeLayout)findViewById(R.id.viewtocapture);
ImageView bmImage = (ImageView)findViewById(R.id.imageView);
view.setDrawingCacheEnabled(true);
// this is the important code :)
// Without it the view will have a dimension of 0,0 and the bitmap will be null
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache(true);
view.buildDrawingCache();
Bitmap b = Bitmap.createBitmap(view.getDrawingCache()); //Line 53
view.setDrawingCacheEnabled(false); // clear drawing cache
bmImage.setImageBitmap(b);
wheel.setProgress(0.0f);
}
这是 Stacktrace/Logcat:
Caused by: java.lang.NullPointerException
at android.graphics.Bitmap.createBitmap(Bitmap.java:484)
at com.redstonedevelopers.status_v1.SplashPage.onCreate(SplashPage.java:53)
at android.app.Activity.performCreate(Activity.java:5047)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
at android.app.ActivityThread.access$700(ActivityThread.java:134)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
我尝试过以下问题的答案: 这里:take a screenshot from the activity 这里:NullPointerException in createBitmap() from View 在这里:android createBitmap NullPointerException
一切都无济于事。我应该做些什么改变和/或做些什么才能让它发挥作用?
-R
【问题讨论】:
-
at com.redstonedevelopers.status_v1.SplashPage.onCreate(SplashPage.java:53)请显示您的 onCreate 并注明第 53 行。 -
@redstonedev ok 然后放 view.setDrawingCacheEnabled(true);正好在 view.buildDrawingCache();
-
@redstonedev 好的...我有的最后一个解决方案:使用 view.getRootView().getDrawingCache() intsead of view.getDrawingCache()
-
在第一次实际绘制之前,您不会检测到任何东西。该视图甚至不会在 On Create 中的屏幕上绘制,因此它将为空。您需要使用 TreeViewObserver 并执行所有这些操作。
-
@redstonedev 试试这个答案,如果你愿意,你可以把它放在你自己的方法中。当我需要知道动态视图的大小时,我会使用它,您可以将它用于其他事情,就像您正在尝试做的事情一样。
标签: android bitmap nullpointerexception