Привет! Нужно вводить число от 0 до 1 в edittext, а после заливать цветом часть фона button в соответствии с введенным числом( т.е. ввели 0.25 - заливаем четверть кнопки)
В списке аттрибутов ничего подобного, к сожалению, нет
Ответ
Предлагаю свой вариант решения вопроса - создание кастомной кнопки с необходимой функцией. Сразу ссылка GitHub на небольшой сэмпл, как это все работает и картинка :
Реализация проста и состоит из менее десятка строчек - подрисовывать на кнопку дополнительный слой с шириной, которую мы можем установить сами:
"Мучить" будем очень модную сейчас material-кнопку (AppCompatButton) из последней support.v7 - 22.1 , но то же самое можно проделать с любым виджетом, это не принципиально.
Собственно сам класс кастомной кнопки ProgressButton.java
public class ProgressButton extends AppCompatButton {
private float mRatio;
private int mColor = Color.GREEN;
public ProgressButton(Context context) {
super(context);
init();
}
public ProgressButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ProgressButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init(){
}
public void setRatio (float ratio){
mRatio = ratio;
invalidate();
}
public void setColor (int color){
mColor = color;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
Drawable fill = getResources().getDrawable(R.drawable.abc_btn_default_mtrl_shape);
fill.setColorFilter( mColor, PorterDuff.Mode.MULTIPLY);
fill.setAlpha(128);
fill.setBounds(0, 0, (int) (getWidth()*mRatio), getHeight());
fill.draw(canvas);
super.onDraw(canvas);
}
}
в качестве дополнительного слоя мы используем тот же xml (abc_btn_default_mtrl_shape.xml), что используется и для прорисовки бэкграунда самой кнопки, окрашивая его в собственный цвет, но можно использовать и любой собственный вид при необходимости. Прозрачность устанавливается для того, чтобы эффект нажатия был виден по всей кнопке, а не только на не окрашенной части.
кастомная кнопка реализует методы:
setRatio(float ratio) - установить процент заполнения фона кнопки - число от 0 до 1.
setColor(Color color) - установить цвет заливки
Теперь, как это все работает. Простой пример заполняет часть кнопки при нажатии на нее:
public class MainActivity extends AppCompatActivity {
ProgressButton button;
float ratio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (ProgressButton) findViewById(R.id.progress_button);
}
public void onClicked (View view) {
button.setRatio(ratio);
ratio = ratio +0.3f;
if (ratio >= 1) ratio = 0;
}
}
activity_main.xml
Комментариев нет:
Отправить комментарий