高度和高度imageView中的位图宽度

时间:2015-12-03 12:35:13

标签: java android bitmap imageview

我使用imageView来保存位图,例如,当前位图具有100 x 100像素。使用以下xml文件。

<ImageView
android:id="@+id/pimage"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>

但是,当imageView xml文件发生变化时,位图的高度和宽度也会发生变化。

<ImageView
android:id="@+id/image"
android:layout_height="400dp"
android:layout_width="match_parent"
android:layout_alignRight="@+id/colorbar"/>

如何找到位图的新高度和宽度?我需要使用高度和宽度作为全局参数,我可以在同一类中的其他函数中使用。

final int[] imageWidth = new int[1];
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {
        //get Image Width and height here
        imageWidth[0] = image.getWidth();
        int imageHeight = image.getHeight();
        //Then remove layoutChange Listener
        ViewTreeObserver vto = image.getViewTreeObserver();
        Log.d("Height12", Integer.toString(imageWidth[0]));
        //phaseimage.getViewTreeObserver().removeOnPreDrawListener(this);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            vto.removeOnGlobalLayoutListener(this);
        } else {
            vto.removeGlobalOnLayoutListener(this);
        }
    }
});
Log.d("Height12", Integer.toString(imageWidth[0]));

内部功能是728,在0之外。

2 个答案:

答案 0 :(得分:1)

将位图设置为imageview后,请使用ViewtreeObserver Like Below:

//Your Imageview Reference
ImageView imageView = (ImageView) findViewById(R.id.imageView);

final ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onGlobalLayout() { 
        //get Image Width and height here 
        int imageWidth = imageView.getWidth();
        int imageHeight = imageView.getHeight();

        //Call anyfunction which uses width and height here
        function(imageWidth,imageHeight);

        //Then remove layoutChange Listener 
        ViewTreeObserver vto = imageView.getViewTreeObserver();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            vto.removeOnGlobalLayoutListener(this);
        } else { 
            vto.removeGlobalOnLayoutListener(this);
        } 
    } 
}); 

答案 1 :(得分:0)

最后我找到了解决问题的方法。

int imageWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.phase);
    onWindowFocusChanged(hasWindowFocus());
    Log.d("log", Integer.toString(imageWidth))}

@Override
public void onWindowFocusChanged(boolean hasFocus){
    int width=phaseimage.getWidth();
    int height=phaseimage.getHeight();
    imageWidth = width;
    }