如何在创建位图之前测量ImageView?

时间:2016-11-06 17:59:07

标签: layout bitmap imageview xamarin.android measure

我的ImageView在x轴上匹配屏幕尺寸,并在我的布局中使用 y轴上的剩余空间。我想在ImageView中创建与ImageView大小完全相同的位图。请问怎么样?可以通过一些自动设置来完成,我应该调用一些度量函数吗?

我尝试过SetAdjustViewBounds(),但它对我没用。

创建足够大的位图(我不喜欢这样的内存浪费)并且设置SetScaleType(ImageView.ScaleType.Matrix)可以正常工作,但是当我在画布上进行绘图操作时,我不知道应该绘制的区域的实际大小,画布和位图高度都等于yScreen,而imgWeekView高度假装为0,即使它用灰色绘制整个所需区域。 / p>

enter image description here

npm version

1 个答案:

答案 0 :(得分:0)

最后,我找到了一种方法来测量我的ImageView,在这里我将发布我的答案。

我相信应该有更容易的解决方案,但也许没有。从这个问题我得到了大部分重要数据:

How to get the width and height of an android.widget.ImageView?

在我的Android应用程序中,事情看起来有点不同,我没有足够的经验来说明原因。我不得不改变一点。我必须学习一些关于接口的知识,这个问题也有帮助。

Implementing the View.IOnTouchListener interface

这是我如何结合的东西。首先,我创建了将要执行该测量的类。

public class MyPredrawListener : Java.Lang.Object, ViewTreeObserver.IOnPreDrawListener
{
    ImageView imageView;
    public MyPredrawListener(ImageView img)
    {
        imageView = img;
    }
    public bool OnPreDraw()
    {
        imageView.ViewTreeObserver.RemoveOnPreDrawListener(this);
        int finalHeight = imageView.MeasuredHeight;
        int finalWidth = imageView.MeasuredWidth;
        Bitmap bitmap = Bitmap.CreateBitmap(finalWidth, finalHeight, Bitmap.Config.Argb8888);
        imageView.SetImageBitmap(bitmap);

        //Test to see result
        Canvas cnv = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.Color = new Color(255, 255, 0);
        cnv.DrawColor(new Color(128, 128, 128));
        cnv.DrawCircle(finalWidth-50, finalHeight-50, 50, paint);

        return true;
    }
}

在我创建imageView的代码中,我设置了这样的监听器。

imgWeekView = new ImageView(context);
MyPredrawListener listener=new MyPredrawListener(imgWeekView);
imgWeekView.ViewTreeObserver.AddOnPreDrawListener(listener);

在OnPreDraw函数中,我输入测试代码以图形方式查看结果,将位图清除为灰色并在视图的右下方绘制黄色圆圈。

enter image description here