gpt4 book ai didi

android - 使用预定义的度量以编程方式扩展 View

转载 作者:行者123 更新时间:2023-11-30 03:24:03 25 4
gpt4 key购买 nike

我有这样的布局资源,我想用布局宽度和高度来膨胀它:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="75px"
android:layout_height="25px">

<TextView
android:id="@+id/drawable_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Name" />

<TextView
android:id="@+id/drawable_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/drawable_name"
android:layout_alignParentLeft="true"
android:gravity="center_horizontal"
android:layout_below="@+id/drawable_name"
android:text="Some Text" />

</RelativeLayout>

View 可以是任何东西,我正在将它转换为 Bitmap。

private Bitmap getBitmap(View v){
v.measure(MeasureSpec.makeMeasureSpec(mDrawableWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(mDrawableHeight, MeasureSpec.EXACTLY));
v.layout(0, 0, mDrawableWidth, mDrawableHeight);
Bitmap returnedBitmap = Bitmap.createBitmap(mDrawableWidth, mDrawableHeight,Bitmap.Config.ARGB_8888);
Canvas c=new Canvas(returnedBitmap);
v.draw(c);
return returnedBitmap;
}

到目前为止,我已经对宽度和高度进行了硬编码,并且我希望能够以编程方式执行此操作,访问 layout_widthlayout_height。有什么办法可以做到这一点?如果有另一种方法可以使用此值扩充 View 而不在度量中指定它们,请告诉我。

如果我创建自定义 View ,是否有机会指定固定的宽度和高度?

最佳答案

这个例子应该有效。可能需要一些调整才能使其完美,具体取决于您的需要,但请试一试:

//Get a bitmap from a layout resource. Inflates it into a discarded LinearLayout
//so that the LayoutParams are preserved
public static Bitmap getLayoutBitmap (Context c, int layoutRes, int maxWidth, int maxHeight) {
View view = LayoutInflater.from(c).inflate(layoutRes, new LinearLayout(c), false);
return getViewBitmap(view, maxWidth, maxHeight);
}

public static Bitmap getViewBitmap (View v, int maxWidth, int maxHeight) {
ViewGroup.LayoutParams vParams = v.getLayoutParams();

//If the View hasn't been attached to a layout, or had LayoutParams set
//return null, or handle this case however you want
if (vParams == null) {
return null;
}

int wSpec = measureSpecFromDimension(vParams.width, maxWidth);
int hSpec = measureSpecFromDimension(vParams.height, maxHeight);

v.measure(wSpec, hSpec);

final int width = v.getMeasuredWidth();
final int height = v.getMeasuredHeight();

//Cannot make a zero-width or zero-height bitmap
if (width == 0 || height == 0) {
return null;
}

v.layout(0, 0, width, height);

Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
v.draw(canvas);

return result;
}

private static int measureSpecFromDimension (int dimension, int maxDimension) {
switch (dimension) {
case ViewGroup.LayoutParams.MATCH_PARENT:
return View.MeasureSpec.makeMeasureSpec(maxDimension, View.MeasureSpec.EXACTLY);
case ViewGroup.LayoutParams.WRAP_CONTENT:
return View.MeasureSpec.makeMeasureSpec(maxDimension, View.MeasureSpec.AT_MOST);
default:
return View.MeasureSpec.makeMeasureSpec(dimension, View.MeasureSpec.EXACTLY);
}
}

关于android - 使用预定义的度量以编程方式扩展 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com