Java 如何在Android中调整LayerDrawable的大小和位置

Java 如何在Android中调整LayerDrawable的大小和位置,java,android,bitmap,drawable,layer,Java,Android,Bitmap,Drawable,Layer,我有一个LayerDrawable,它应该显示5个位图。1个背景和4个图标(每个可绘制的图层可能不同),如网格。不幸的是,这些图标的宽度和高度不同。我的问题是调整它们的大小,同时保持它们的比例,并将它们放在它们的位置内(1-4个图标,5个背景): 如果我调整这些位图的大小,给它们Gravity.CENTER它们将不再适合背景矩形的边界。如果我离开Gravity.CENTER,当我调用layerDrawable.setLayerSet(numlayer,left,top,right,bottom)

我有一个LayerDrawable,它应该显示5个位图。1个背景和4个图标(每个可绘制的图层可能不同),如网格。不幸的是,这些图标的宽度和高度不同。我的问题是调整它们的大小,同时保持它们的比例,并将它们放在它们的位置内(1-4个图标,5个背景):

如果我调整这些位图的大小,给它们
Gravity.CENTER
它们将不再适合背景矩形的边界。如果我离开
Gravity.CENTER
,当我调用
layerDrawable.setLayerSet(numlayer,left,top,right,bottom)
时,它们似乎会被重新缩放。 正确的方法是什么?如何在正确放置它们的同时保持它们的比率? 到目前为止,我还不明白为什么BitmapDrawable中的getIntrinsicWidth/Height返回的是比原始位图中的getWidth/Height更小的内容。
我的尝试:
1.从XML中获取它们,将“虚拟可绘制”放在其中,并用上面描述的结果替换它。 2.在我的程序中创建LayerDrawable,并在其中传递所有Drawable。似乎SetLayerSet没有影响,或者我只看到背景(它是我可绘制数组中的元素0)

3.扩展LayerDrawable并尝试自己跟踪任何没有合理结果的内容

默认的
BitmapDrawable
,用给定的
位图填充其边界。如果开始使用
重力
,则
位图将根据给定的
重力
进行定位。我想在您的情况下,最好的选择是创建自己的
可绘制的

关于getInstruction[Height | Width]方法,它们返回基本
位图的实际大小,如果系统在加载时调整其大小(例如,在mdpi屏幕上加载的hdpi图像),则可能会有所不同

==================
|      |  |      |
|   1  |  |   2  |
|------.5 .------|
|------.  .------|
|   3  |  |   4  |
|      |  |      |
==================