Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Java Indoratalas SDK 2.0:将毕加索与自定义ImageView结合使用_Java_Imageview_Android Custom View_Picasso_Indoor Positioning System - Fatal编程技术网

Java Indoratalas SDK 2.0:将毕加索与自定义ImageView结合使用

Java Indoratalas SDK 2.0:将毕加索与自定义ImageView结合使用,java,imageview,android-custom-view,picasso,indoor-positioning-system,Java,Imageview,Android Custom View,Picasso,Indoor Positioning System,所以…,我想使用毕加索图像加载器库和现有的自定义imageview类来加载、调整和旋转我的图像。问题是我没有成功地使用它,就好像我使用了以下代码:“Picasso.with(this).load(url).into(custom ImageView)”,它会给我一个错误并建议“将参数强制转换为目标”。将参数“custom imageview”强制转换为目标后,当我测试应用程序时,它会在Logcat中给出错误消息,称“custom imageview无法强制转换为目标”。 在这个问题之后,我使用了

所以…,我想使用毕加索图像加载器库和现有的自定义imageview类来加载、调整和旋转我的图像。问题是我没有成功地使用它,就好像我使用了以下代码:“Picasso.with(this).load(url).into(custom ImageView)”,它会给我一个错误并建议“将参数强制转换为目标”。将参数“custom imageview”强制转换为目标后,当我测试应用程序时,它会在Logcat中给出错误消息,称“custom imageview无法强制转换为目标”。 在这个问题之后,我使用了一段不同的代码,其中包含与毕加索图书馆的目标界面相对应的“onBitmapLoaded”方法,我能够成功地加载、调整大小和旋转图像,但当我在开发室内定位系统时,蓝点显示在看不见的地方。显示不可见/不正确的原因是,自定义imageview未与毕加索一起用于加载和显示图像。下面是一段包含“onBitmapLoaded”方法的代码,其中我没有得到我想要的结果,它也不正确,因为过了一段时间,应用程序崩溃,出现了以下错误“java.lang.RuntimeException:Canvas:尝试使用回收的位图android.graphics。Bitmap@1d21751f“它指的是代码行自定义ImageView类中的“super.onDraw(canvas)”

private IAFloorPlan mFloorPlan;
private BlueDotView mImageView;
private Target      mLoadTarget;

 private void showFloorPlanImage(String filePath) {
        final String url = mFloorPlan.getUrl();

        if (mLoadTarget == null) {
            mLoadTarget = new Target() {

                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    Log.d(TAG, "onBitmap loaded with dimensions: " + bitmap.getWidth() + "x"
                            + bitmap.getHeight());
                    mImageView.setImage(ImageSource.bitmap(bitmap));
                    mImageView.setRadius(mFloorPlan.getMetersToPixels() * dotRadius);
                    //mImageView.setRotation(90);
                    //setupGroundOverlay(floorPlan, bitmap);
                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {
                    // N/A
                }

                @Override
                public void onBitmapFailed(Drawable placeHolderDraweble) {
                    Toast.makeText(AutomaticFloorPlanLoader.this, "Failed to load bitmap",
                            Toast.LENGTH_SHORT).show();
                }
            };
        }

        RequestCreator request = Picasso.with(this).load(url).rotate(90).resize(500,500);

        final int bitmapWidth = mFloorPlan.getBitmapWidth();
        final int bitmapHeight = mFloorPlan.getBitmapHeight();

        if (bitmapHeight > MAX_DIMENSION) {
            request.resize(0, MAX_DIMENSION);
        } else if (bitmapWidth > MAX_DIMENSION) {
            request.resize(MAX_DIMENSION, 0);
        }

        request.into(mLoadTarget);
        /*DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int screenWidth = displaymetrics.widthPixels;
        int screenHeight = displaymetrics.heightPixels;
        LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(screenWidth,screenHeight);
        mImageView.setLayoutParams(parms);*/
        //Picasso.with(this).load(Uri.parse(mFloorPlan.getUrl())).into((Target) mImageView);
        Log.w(TAG, "showFloorPlanImage: " + filePath);
       /* mImageView.setRadius(mFloorPlan.getMetersToPixels() * dotRadius);
        mImageView.setImage(ImageSource.uri(filePath));
        mImageView.setRotation(90);*/
    }
下面是我的应用程序中上述代码的结果:“

我尝试过setLinearLayout、displayMetrics和onMeasure方法,但都无法调整图像大小

因此,总的来说,我的问题是:如何将毕加索与自定义ImageView类/ImageView本身结合使用来加载、调整和旋转图像,并在这个特定示例中正确显示蓝点?


如果您能帮助我解决这个问题,我将提前向您表示感谢。

IndoorAtlas示例中的
BlueDotView
(此处:)扩展了Dave Morissey的
子采样ScaleImageView
(此处:).
SubsamplingScaleImageView
不扩展
android.widget.ImageView
,因此您不能将其直接用作加载目标:
Picasso.with(this.load.url).into(mImageView)
,但您需要像以前一样使用
target

java.lang.RuntimeException:Canvas:尝试使用回收的位图android.graphics。Bitmap@1d21751f
这是因为
子采样ScaleImageView
与大多数图像加载库不兼容。请阅读此处的详细信息:。该链接还解释了混合
子采样ScaleImageView的正确方法与毕加索。快速破解是将
位图的副本传递到图像视图:

@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
     mImageView.setImage(ImageSource.bitmap(bitmap.copy(bitmap.getConfig(), true));
}
对于不经常更改的小位图,这可能没有问题,但对于大位图,这会浪费资源,并可能导致OOM异常


看起来您正在将位图大小调整为500x500像素。如果原始平面图位图不是正方形(?),则更改纵横比和正确定位蓝点将失败。若要将位图的宽度设置为500px并仍保持纵横比,请使用:
resize(500,0)

我尝试了你所说的,并做了许多更改,但蓝点始终看不见。问题在于fetchfloorplan方法中,我不确定是否仍应使用mFloorPlan=result.getResult();还是应使用ShowFloorplan image(result.getResult));因此,我在我的应用程序中同时使用了这两种代码。这段代码中的新更改可以在这里看到:“”。如果您能指出这段代码中的错误,那就太好了。
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
     mImageView.setImage(ImageSource.bitmap(bitmap.copy(bitmap.getConfig(), true));
}