Je ne sais pas si quelqu'un est en train de lire encore ce fil ou non, mais la solution de Jeff ne vous obtenir à mi-chemin (un peu littéralement) . Ce que son onMeasure fera est d'afficher la moitié de l'image dans la moitié du parent. Le problème est qu'appeler super.onMeasure avant le setMeasuredDimension
mesurera tous les enfants dans la vue en fonction de la taille d'origine, puis coupez simplement la vue en deux lorsque le setMeasuredDimension
la redimensionne.
, vous avez besoin au lieu d'appeler setMeasuredDimension
(comme requis pour un remplacement de onMeasure) et fournissent une nouvelle LayoutParams
pour votre vue, puis appel super.onMeasure
. Souvenez-vous que vos LayoutParams
sont dérivés du type parent de votre vue, et non du type de votre vue.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
this.setLayoutParams(new *ParentLayoutType*.LayoutParams(parentWidth/2,parentHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Je crois que la seule fois que vous aurez des problèmes avec le parent LayoutParams
est si le parent est un AbsoluteLayout
(qui est dépréciée, mais encore parfois utile).
Il est possible de le faire en utilisant ConstraintLayout, vérifiez ceci: https://stackoverflow.com/questions/37318228/how-to-make-constraintlayout-work-with-percentage-values –