我使用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之外。
答案 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;
}