在我的自定义View .xml中,我将宽度和高度定义为w = 600dp , h = 700dp
。现在我知道getMeasuredHeight()/ getMeasuredWidth()在绘制视图后给出宽度和高度的值,它们可能与我在.xml文件中给出的值不同,是否有解决方法来获取getMeasuredHeight()
和{{1在视图之前实际绘制的值不使用getMeasuredWidth()
?
如何在不同的屏幕中计算更改的onMeasure()
尺寸?与我的dp
一样,在模拟器上运行时转换为600h*700w
。
答案 0 :(得分:1)
您可以覆盖onSizeChanged()
以获取视图的高度和宽度。请参阅下面的内容:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mWidth = w;
mHeight = h;
super.onSizeChanged(w, h, oldw, oldh);
Log.d(TAG, "onSizeChanged: " + " width: " + w + " height: " + h + " oldw " + oldw + " oldh " + oldh);
}
要将dp转换为像素,您可以使用以下代码:
sizeInPixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
sizeInDp, getResources().getDisplayMetrics());
答案 1 :(得分:0)
我也遇到同样的问题。
这是我的解决方案,我是如何遇到类似问题的。在使用OnPreDrawListener()
ImageView iv= binding.photoRoundProfile;
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
private int mFinalWidth = 0;
private int mFinalHeight = 0;
public boolean onPreDraw() {
if(mFinalHeight != 0 || mFinalWidth != 0)
return true;
mFinalHeight = iv.getHeight();
mFinalWidth = iv.getWidth();
Log.d("hilength","Height: " + mFinalHeight + " Width: " + mFinalWidth);
ImageUtil.setPic(binding.photoRoundProfile, mCurrentPhotoPath);
return true;
}
});