2
Я простирающийся SeekBar:Почему прогресс изменен не называется?
public class NutritionalSeekBar extends SeekBar implements SeekBar.OnSeekBarChangeListener {
public NutritionalSeekBar(Context context) {
super(context);
}
public NutritionalSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NutritionalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public NutritionalSeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = (Math.round(progress/50)) * 50;
seekBar.setProgress(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
затем использовать его в XML: не
<com.package.views.NutritionalSeekBar
android:id="@+id/seek_bar_carbos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:progress="50" />
Почему прогресс обратного вызова изменился не вызывается?
Хорошо, я понял цепь конструкторов. Как насчет цепочки, только если я на Lollipop для последнего конструктора? – Jumpa
Выполнение этого способа позволяет свести код инициализации к минимуму. Вызов 'this (context, null);' в первом конструкторе вызывает второй конструктор, который в свою очередь вызывает третий. Поскольку первый конструктор не имеет параметра «AttributeSet», мы просто передаем значение по умолчанию второму конструктору. То же самое для вызова третьего конструктора из второго. –
О, я просто понял, что вы реализуете четырехпараметрический конструктор. В этом случае вам также необходимо вызвать код инициализации, поскольку этот конструктор доступен только в Lollipop или выше. Если вы планируете добавлять дополнительные инициализации, а не только слушателя, вы можете переместить их в отдельный метод и вызвать этот метод как из трех, так и четырехпараметрических конструкторов. В противном случае вы можете просто вызвать 'setOnSeekBarChangeListener (this);' снова в four-param. –