Android 获取动态创建的Imageview的高度和宽度

Android 获取动态创建的Imageview的高度和宽度,android,imageview,android-imageview,Android,Imageview,Android Imageview,我有多个图像是在for循环中动态创建的 for (int i = 0; i < 15; i++) { ivFront = new TouchImageView(this); ivFront.setId(i + 1); ivFront.setBackgroundResource(frontImages[i]); RelativeLayout.LayoutParams params = new Re

我有多个图像是在for循环中动态创建的

for (int i = 0; i < 15; i++) {
            ivFront = new TouchImageView(this);
            ivFront.setId(i + 1);
            ivFront.setBackgroundResource(frontImages[i]);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    frontWidth[i], frontHeight[i]);
            ((MarginLayoutParams) params).setMargins(frontX_axis[i],
                    frontY_axis[i], 0, 0);
            ivFront.setAdjustViewBounds(true);
            ivFront.setLayoutParams(params);
            ivFront.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                    Bitmap bmp = loadBitmapFromView(v);
                    return true;
                }
            });

            //Bitmap bmp_new = loadBitmapFromView(ivFront);
            rlMain.addView(ivFront, params);


        }

public static Bitmap loadBitmapFromView(View v) {
    Canvas bitmapCanvas = new Canvas();
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth() * 2,
            v.getHeight() * 2, Bitmap.Config.ARGB_8888);
    bitmapCanvas.setBitmap(bitmap);
    bitmapCanvas.scale(2.0f, 2.0f);
    v.draw(bitmapCanvas);
    return bitmap;
}

测量视图后,使用预绘制侦听器获取尺寸。OnWindowFocusChanged不保证已测量所有视图

view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        view.getViewTreeObserver().removeOnPreDrawListener(this);
        int width = view.getWidth();

    }
});

为每个动态
图像视图添加此代码:

ivFront.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
        iv.getViewTreeObserver().removeOnPreDrawListener(this);
        height = iv.getMeasuredHeight();
        width = iv.getMeasuredWidth();
        return true;
    }
});

ivFront.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                    Bitmap bmp = loadBitmapFromView(v);
                    return true;
                }
            });

如果要保存所有动态
imageview的
宽度
高度
,可以使用
整数列表
保存每个
imageview的宽度和高度
如果动态创建了多个图像,请尝试以下操作:

//初始化图像数组

private ImageView myImages[] = new ImageView[your_array_length];
//以编程方式创建并添加到父视图

for (int i = 0; i < your_array_length; i++) {
                myImages[i] = new ImageView(this);
                myImages[i].setId(i + 1);
                myImages[i].setBackgroundResource(your_array[i]);
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        frontWidth[i], frontHeight[i]);
                ((MarginLayoutParams) params).setMargins(frontX_axis[i],
                        frontY_axis[i], 0, 0);
                myImages[i].setAdjustViewBounds(true);
                myImages[i].setLayoutParams(params);

                if (getIntent() != null && i != your_array,length) {
                    final int j = i;
                    myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                        public boolean onPreDraw() {
                            myImages[j].getViewTreeObserver().removeOnPreDrawListener(this);
                    finalHeight = myImages[j].getMeasuredHeight();
                        finalWidth = myImages[j].getMeasuredWidth();
                    your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth);
                            return true;
                        }
                    });
                }
                your_parent_layout.addView(myImages[i], params);
            }
for(int i=0;i

//运行代码

您是否尝试了多个ImageView。我将给出最后一张图片的宽度和高度。Thanks@user406090是的,事情也是这样。有什么解决方法吗?你能显示你的imageview吗?如果可以显示,则表示其宽度和高度应大于0
for (int i = 0; i < your_array_length; i++) {
                myImages[i] = new ImageView(this);
                myImages[i].setId(i + 1);
                myImages[i].setBackgroundResource(your_array[i]);
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        frontWidth[i], frontHeight[i]);
                ((MarginLayoutParams) params).setMargins(frontX_axis[i],
                        frontY_axis[i], 0, 0);
                myImages[i].setAdjustViewBounds(true);
                myImages[i].setLayoutParams(params);

                if (getIntent() != null && i != your_array,length) {
                    final int j = i;
                    myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                        public boolean onPreDraw() {
                            myImages[j].getViewTreeObserver().removeOnPreDrawListener(this);
                    finalHeight = myImages[j].getMeasuredHeight();
                        finalWidth = myImages[j].getMeasuredWidth();
                    your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth);
                            return true;
                        }
                    });
                }
                your_parent_layout.addView(myImages[i], params);
            }