Пишем свой собственный RadioButton с возможностью масштабирования и выбора цвета.
Ожидает приглашения
Совсем недавно начал писать под Android и столкнулся с такой вещью, мне нужно было разместить на дисплее около 20-ти RadioButton’ов. И каково было мое разочарование, что стандартный RadioButton никак нельзя отмасштабировать и менять его цвет.
Тогда я взялся написать свой класс OwnRadioButton, который будет удовлетворять всем потребностям.
И так, делаем свойбатон баттон:
OwnRadioButton.java
У этого класса есть множество возможностей для персонализации. Можно выставлять различные цвета кнопок, радиусы как внешнего, так и внутреннего круга (см. комментарии).
Пример вызова:
OwnRadioButtonActivity.java
Надеюсь, что статья кому-нибудь пригодиться. И пара картинок:

Пользовался этой статьей
Тогда я взялся написать свой класс OwnRadioButton, который будет удовлетворять всем потребностям.
И так, делаем свой
OwnRadioButton.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
//Класс, аналогичный RadioButton
public class OwnRadioButton extends View implements OnTouchListener
{
private final float x; //Координата по x
private final float y; //Координата по y
private final int r; //Радиус окружности
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public int fat =4; //Толщина линии оружности
public Boolean istouched = false;//выбран ли радио батон
public int pushcolor=Color.RED; //Цвет, когда выбран радио батон
public int nonpushcolor=Color.BLACK; //Цвет когда не выбран
public int bigcirclecolor=Color.WHITE; //Цвет большого круга
public OwnRadioButton(Context context, float x, float y, int r,Boolean istouched)
{
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
this.x = x;
this.y = y;
this.r = r;
this.istouched = istouched;
}
@Override
public void onDraw(Canvas canvas)
{
mPaint.setColor(bigcirclecolor); //Цвет внейшней оркужности
canvas.drawCircle(x, y, r, mPaint);
if (istouched==false)// Цвет внутренней окружности
mPaint.setColor(nonpushcolor);
else
mPaint.setColor(pushcolor);
canvas.drawCircle(x, y, r-fat, mPaint);
}
@Override
public boolean onTouch(View view, MotionEvent event)
{
invalidate();
float xtouch = event.getX();
float ytouch = event.getY();
if (((x-xtouch)*(x-xtouch)+(y-ytouch)*(y-ytouch))<r*r)
//определяем попал ли клик в область радио батона
{
if (event.getAction()== MotionEvent.ACTION_DOWN)
//реагируем только на нажатие на экран
{
if (istouched == true) //если батон был уже нажат
{
istouched = false;
return false;
}
else
{
istouched = true;
return true;
}
}
return true;
}
else
return false;
}
}
У этого класса есть множество возможностей для персонализации. Можно выставлять различные цвета кнопок, радиусы как внешнего, так и внутреннего круга (см. комментарии).
Пример вызова:
OwnRadioButtonActivity.java
//...
final FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
OwnRadioButton radio = new OwnRadioButton(this,50,50,25,false);
OwnRadioButton radio2 = new OwnRadioButton(this,100,50,25,false);
radio2.fat = 1;
radio2.bigcirclecolor=Color.MAGENTA;
main.addView(radio);
main.addView(radio2);
//...
Надеюсь, что статья кому-нибудь пригодиться. И пара картинок:

Пользовался этой статьей