Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将自定义视图转换为谷歌地图标记图标的位图_Android_Google Maps_Android Custom View_Bitmapfactory - Fatal编程技术网

Android 如何将自定义视图转换为谷歌地图标记图标的位图

Android 如何将自定义视图转换为谷歌地图标记图标的位图,android,google-maps,android-custom-view,bitmapfactory,Android,Google Maps,Android Custom View,Bitmapfactory,我需要在运行时计算谷歌地图图标标记。为此,我创建了从视图派生的类 class DrawView extends View { Paint p; RectF rectf; String textLabel; public DrawView(Context context, String text) { super(context); p = new Paint(); rectf = new RectF(100,100,300,150); this.textLab

我需要在运行时计算谷歌地图图标标记。为此,我创建了从视图派生的类

class DrawView extends View {

Paint p;
RectF rectf;
String textLabel;

public DrawView(Context context, String text) {
    super(context);
    p = new Paint();
    rectf = new RectF(100,100,300,150);
    this.textLabel=text;
}

@Override
protected void onDraw(Canvas canvas) {
    p.setColor(Color.RED);
    p.setStrokeWidth(10);
    canvas.drawRoundRect(rectf, 20, 20, p);
    //another draw will be here...
    }
}
将视图转换为位图

public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    v.draw(c);
    return b;
}
添加标记

View view =new DrawView(this,"Some text");
            view.setDrawingCacheEnabled(true);
            view.buildDrawingCache();
            Bitmap bitmap=loadBitmapFromView(view);
            Marker marker=mMap.addMarker(new MarkerOptions().position(new LatLng(s.lat,s.lng)).icon(BitmapDescriptorFactory.fromBitmap(bitmap)));
NPE发生

FATAL EXCEPTION: main
java.lang.NullPointerException
at ru.ch2.activity.CheckInActivity.loadBitmapFromView(CheckInActivity.java:439)
at ru.ch2.activity.CheckInActivity.onMapReady(CheckInActivity.java:254)
at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:347)
at xk.a(:com.google.android.gms.DynamiteModulesB:82)
at maps.af.t$5.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
在第行的loadBitmapFromView中

v、 布局(v.getLeft(),v.getTop(),v.getRight(),v.getBottom())


尝试使用此功能:

调用
view.measure
强制计算视图大小,以获得正确的视图大小

 public static Bitmap loadBitmapFromView(View view) {
    view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
    Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    view.draw(canvas);
    return bitmap;
}

您的
视图v
为空。您将null作为参数传递给一个方法。可能需要提供的所有内容都是一个
位图
(或者更好的是直接
位图描述符
):您不必扩展
视图
,因此可能最好在
v.layout(…)
之前检查
View.isLaidOut()。