Я создал панель поиска с программным подходом c. Я устанавливаю min и max, а затем наSeekBarChange получаю прогресс. Прогресс, который я получаю, (неожиданно) перевернут / инвертирован, например, когда я перемещаю большой палец влево, прогресс увеличивается до максимума, а когда я перемещаю большой палец вправо, прогресс уменьшается до минимума.
Вот мой код:
publi c void setSlider (SliderModel sm) {
SeekBar sb=null;
if((sb=(SeekBar) currentFrame.findViewById(sm.getIntid()))!=null){
ViewGroup parent=(ViewGroup)currentFrame;
parent.removeView(sb);
}
if(sm.getStyle()==2){
sb=new VerticalSeekBar(this);
}
else{
sb=new SeekBar(this);
}
sb.setId(sm.getIntid());
int type=sm.getStyle();
int height=sm.getHeight();
int width=sm.getWidth();
int temp=0;
FrameLayout.LayoutParams flp=new FrameLayout.LayoutParams(width,height);
flp.leftMargin=sm.getLeft();
flp.topMargin=sm.getTop();
sb.setLayoutParams(flp);
String bgcolor=sm.getBackcolor();
int red=Integer.parseInt(bgcolor.substring(0,3));
int green=Integer.parseInt(bgcolor.substring(3,6));
int blue=Integer.parseInt(bgcolor.substring(6,9));
//sb.setBackgroundColor(Color.rgb(red,green,blue));
sb.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(Color.rgb(red,green,blue), PorterDuff.Mode.MULTIPLY));
String fontcolor=sm.getFontcolor();
red=Integer.parseInt(fontcolor.substring(0,3));
green=Integer.parseInt(fontcolor.substring(3,6));
blue=Integer.parseInt(fontcolor.substring(6,9));
sb.getThumb().setColorFilter(Color.rgb(red,green,blue), PorterDuff.Mode.SRC_IN);
//pointer Color
final String sbid=sm.getId();
int min=sm.getMin();
int max=sm.getMax();
double pos=sm.getPos();
double diff=max-min;
final int df=(int)diff;
double scaled_pos=(((pos-min)/diff)*100);
Log.d("SCALLED",scaled_pos+"");
final int mn=min;
boolean greatr=false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
sb.setMin(sm.getMin());
sb.setMax(sm.getMax());
greatr=true;
Log.d("SLIDDER","MIN SET!");
sb.setProgress(sm.getPos());
}
else{
sb.setProgress((int)scaled_pos);
}
final boolean finalGreatr = greatr;
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
ProgressChangedEvent pce=new ProgressChangedEvent();
Message m=new Message();
m.what=Constants.PROGRESS_CHANGED;
pce.id=sbid;
double prog=(mn+(((double)progress/100)*df));
if (finalGreatr){
Log.d("Progress",String.valueOf(progress));
pce.progress=progress;
}
else{
Log.d("Progress",String.valueOf(progress));
pce.progress=(int)prog;
}
//progress;
m.obj=pce;
communicationThread.h.sendMessage(m);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
currentFrame.addView(sb);
}