Вы можете создать подкласс типа представления и переопределить метод onSizeChanged.
Я хотел иметь масштабируемые составные рисованные объекты в моих текстовых представлениях, которые не требовали от меня возиться с определением растровых рисованных объектов вxml и т. д. и сделал это следующим образом:
public class StatIcon extends TextView {
private Bitmap mIcon;
public void setIcon(int drawableId) {
mIcon = BitmapFactory.decodeResource(RIApplication.appResources,
drawableId);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if ((w > 0) && (mIcon != null))
this.setCompoundDrawablesWithIntrinsicBounds(
null,
new BitmapDrawable(Bitmap.createScaledBitmap(mIcon, w, w,
true)), null, null);
super.onSizeChanged(w, h, oldw, oldh);
}
}
(Обратите внимание, что я использовал w дважды, а не h, так как в этом случае я помещал значок над текстом, и, таким образом, значокне должна иметь такую же высоту, как текстовое представление)
Это может быть применено к фоновым объектам или к любому другому параметру, размер которого вы хотите изменить относительно размера вашего представления.onSizeChanged () вызывается при первом создании View, поэтому вам не нужны особые случаи для инициализации размера.