package com.hellodev.lightme.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
import com.hellodev.lightme.R;
public class SeekPreference extends Preference implements OnSeekBarChangeListener {
private int MAX_PROGRESS;
private int MIN_PROGRESS;
private int PROGRESS_RATE;//seekbar分成越多份就滑动越流畅,如果每一格放得太大,就会出现事件调用不到的情况
private int MAX_VALUE;
private int MIN_VALUE;
private int PROGRESS_INCREMENT;
private SeekBar mSeekBar;
private TextView mSummary;
private int currentValue;
public SeekPreference(Context context) {
this(context, null);
}
public SeekPreference(Context context, AttributeSet attrs) {
this(context, attrs, -1);
}
public SeekPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray mTypeArray = context.obtainStyledAttributes(attrs,
R.styleable.SeekPreference);
MAX_PROGRESS = mTypeArray.getInt(
R.styleable.SeekPreference_maxProgress, 100);
MIN_PROGRESS = mTypeArray.getInt(
R.styleable.SeekPreference_minProgress, 0);
PROGRESS_INCREMENT = mTypeArray.getInt(
R.styleable.SeekPreference_progressIncrement, 1);
PROGRESS_RATE = mTypeArray.getInt(
R.styleable.SeekPreference_progressRate, 1);
MAX_VALUE = MAX_PROGRESS / PROGRESS_RATE;
MIN_VALUE = MIN_PROGRESS / PROGRESS_RATE;
currentValue = MIN_VALUE;
mTypeArray.recycle();
}
@Override
protected void onSetInitialValue(final boolean restoreValue, final Object defaultValue) {
try {
currentValue = restoreValue ? getPersistedInt(MIN_VALUE) : MIN_VALUE;
} catch (NumberFormatException ex) {
currentValue = MIN_VALUE;
}
}
@Override
protected View onCreateView(ViewGroup parent) {
return LayoutInflater.from(getContext()).inflate(getLayoutResource(), parent,
false);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
mSeekBar.setMax(MAX_PROGRESS - MIN_PROGRESS);
mSeekBar.setKeyProgressIncrement(PROGRESS_INCREMENT);
mSeekBar.setOnSeekBarChangeListener(this);
mSummary = (TextView) view.findViewById(R.id.summary);
mSeekBar.setProgress(currentValue * PROGRESS_RATE - MIN_PROGRESS);
}
@Override
public void onProgressChanged(SeekBar seekBar, int value,
boolean fromUser) {
currentValue = (value + MIN_PROGRESS) / PROGRESS_RATE;
mSummary.setText(currentValue+"分钟");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
persistInt(currentValue);
notifyChanged();
callChangeListener(currentValue);
}
}