RadioButton设置图片无法居中问题
2017-01-19 10:15
2536 查看
RadioButton设置图片无法居中问题
实习一个多月,在项目中遇到这样一个问题左边是改正后想要的效果,右边为原本效果(即使设置了gravity:center也只有文字居中)。
现在要解决的问题就是,当我设置gravity:center的话,图片也要居中显示。
经过粗略的查阅之后,看到网上的一些解决方法:移动画布。这样的方法能实现这样的效果,但却没有从根源上解决问题。
大致看了一些源码,也似懂非懂的有些解决的方向。
<先贴下源码 :compoundbutton的ondraw()方法>
@Override protected void onDraw(Canvas canvas) { final Drawable buttonDrawable = mButtonDrawable; if (buttonDrawable != null) { //可以看到他好像只关心垂直方向上的gravity final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK; final int drawableHeight = buttonDrawable.getIntrinsicHeight(); final int drawableWidth = buttonDrawable.getIntrinsicWidth(); final int top; switch (verticalGravity) { case Gravity.BOTTOM: top = getHeight() - drawableHeight; break; case Gravity.CENTER_VERTICAL: top = (getHeight() - drawableHeight) / 2; break; default: top = 0; } final int bottom = top + drawableHeight; final int left = isLayoutRtl() ? getWidth() - drawableWidth : 0; final int right = isLayoutRtl() ? getWidth() : drawableWidth; buttonDrawable.setBounds(left, top, right, bottom); final Drawable background = getBackground(); if (background != null) { background.setHotspotBounds(left, top, right, bottom); } } super.onDraw(canvas); if (buttonDrawable != null) { final int scrollX = mScrollX; final int scrollY = mScrollY; if (scrollX == 0 && scrollY == 0) { buttonDrawable.draw(canvas); } else { canvas.translate(scrollX, scrollY); buttonDrawable.draw(canvas); canvas.translate(-scrollX, -scrollY); } } }
所以我的解决思路大致是,拿到设置的图片,根据设置的gravity来重新设定图片的位置。(刚开始我以为问题是在onLayout()中,其实不然,整一个控件位置是在那里,只是往这里画内容的位置不对而已,所以问题还是在onDraw()方法中)
下面我自定义的RadioButton类:
public class CustomRadioButton extends RadioButton { public CustomRadioButton(Context context) { super(context); } public CustomRadioButton(Context context, AttributeSet attrs) { super(context, attrs); } public CustomRadioButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Drawable[] drawables = getCompoundDrawables(); Drawable drawable = drawables[0]; Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); int gravity = getGravity(); int left = 0; if (gravity == Gravity.CENTER) { left = ((int) (getWidth() / 2 - getPaint().measureText(getText().toString()))); } drawable.setBounds(left,0,left+drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); } }
setBounds()方法是指定绘制在那个区域中。
这里只是针对我的需求修改的一个,可以按照这思路增加自己的需求。
希望对大家有用,有不足的地方因为欢迎补充。
<RadioGroup android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="100dp"> <com.example.administrator.radiobuttondrawabletext1.CustomRadioButton android:layout_width="0dp" android:text="BUTTON" android:button="@null" android:drawableLeft="@mipmap/ic_launcher" android:gravity="center" android:layout_weight="1" android:layout_height="78dp" /> <RadioButton android:text="BUTTON" android:layout_width="0dp" android:layout_weight="1" android:layout_height="48dp" /> </RadioGroup>
相关文章推荐
- 解决ImageView手势缩放设置matrix属性后图片无法居中的问题
- RadioGroup的RadioButton图片、文字无法居中解决方法
- RadioButton设置默认选中后无法取消,可选中多个的问题
- 解决字体图标,图片无法垂直居中的问题,屡试不爽
- 无法显示TabHost的setIndicator设置的图片的问题解决办法
- 【微信小程序常见问题】view标签设置背景图片手机无法预览解决方案二
- 有关dialog设置view无法居中的问题
- RadioButton 图片居中问题
- 解决wordpress发布文章,图片无法居中的问题
- TabBar 的selecedImage无法显示设置图片问题 和item文字颜色选中设置
- 解决RadioGroup的RadioButton图片、文字无法居中
- 开发过程中遇到切图的大小的问题,以下是解决设置Android中RadioButton的图片大小和位置
- ruby -- 进阶学习(十四)设置background-image(解决无法获取图片路径问题)
- android小问题:RadioButton设置文字在图片背景的下方
- RadioButton只有图片设置居中
- 无法显示TabHost的setIndicator设置的图片的问题解决办法
- Android RadioButton左边图片不能居中显示问题
- Android radioButton只设置图片是居中显示
- 华为RadioButton字体不居中的问题,RadioButton去掉左侧占位图片
- 解决部分手机RadioButton图片不居中问题