I have one Vertical Seekbar in my android project. Vertical Seekbar is initialized in onCreate Method:
verticalSeekBar1 = (VerticalSeekBar) findViewById(R.id.verticalSeekbar1);
verticalSeekBar1.setOnSeekBarChangeListener(Listener1);
And I have to implement OnSeekBarChangeListener interface as shown below
private SeekBar.OnSeekBarChangeListener Listener1 = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar arg0, int seekBarLevel, boolean changedByUser) {
verticalSeekBar1.setProgress(seekBarLevel);
Log.e(TAG, "onProgressChanged: UserChnagedSeekbar :: "+changedByUser);
if (changedBySpinner){
mSpinner.setSelection(0);
}
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
};
changedByUser is always return false. Whether I changed Seekbar or not. Please help me to get out of this problem. Thank you in advance.
My Custom Vertical Seekbar Class code is
public class VerticalSeekBar extends SeekBar {
private Context mContext;
public VerticalSeekBar(Context context) {
super(context);
init(context);
}
public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public VerticalSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context){
mContext=context;
}
protected void onSizeChanged(int w, int h, int oldWidth, int oldHeight) {
super.onSizeChanged(h, w, oldh, oldw);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
protected void onDraw(Canvas c) {
Paint paint=new Paint();
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(2.0f);
Rect rect=new Rect(0,0,getMeasuredWidth(),getMeasuredHeight());
//c.drawRect(rect,paint);
int vWidth=getMeasuredWidth();
int vHeight=getMeasuredHeight();
float startPointY=83;
float middlePointY = (vHeight)/2;
float lastPointY=vHeight-83;
paint.setColor(Color.DKGRAY);
c.drawLine(rect.left,startPointY,rect.centerX(),startPointY,paint);
c.drawLine(rect.left,middlePointY,rect.centerX(),middlePointY,paint);
c.drawLine(rect.left,lastPointY,rect.centerX(),lastPointY,paint);
paint.setColor(Color.DKGRAY);
float x=((vHeight/2)-startPointY)/3;
float f10dbPoint=x+startPointY;
float f5dbPoint=(2*x)+startPointY;
float fm5dbPoint=(vHeight/2)+x;
float fm10dbPoint=(vHeight/2)+(2*x);
float startX=rect.left+32;
c.drawLine(startX,f10dbPoint,rect.centerX(),f10dbPoint,paint);
c.drawLine(startX,f5dbPoint,rect.centerX(),f5dbPoint,paint);
c.drawLine(startX,fm5dbPoint,rect.centerX(),fm5dbPoint,paint);
c.drawLine(startX,fm10dbPoint,rect.centerX(),fm10dbPoint,paint);
c.rotate(-90);
c.translate(-getHeight(),0);
super.onDraw(c);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
int i=0;
i=getMax() - (int) (getMax() * event.getY() / getHeight());
setProgress(i);
Log.i("Progress",getProgress()+"");
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
public void updateThumb(){
onSizeChanged(getWidth(), getHeight(), 0, 0);
}
}
I didn't got the answer that why it's returning value false. But I got the alternate solution to know weather user changed seekbar value or u have changed seekbar value coding. I was changing seekbar value using depending on spinner value. So take variable
Inside Spinner ItemClickListener make it true
set touchClickListener on the seekbar (vertical seekbar)
Inside onTouchMethod make that variable true
And inside seekbarChangeListener add below code
Perform your action which wanted to, inside if block. Like I am setting spinner value to 0th element.
Well, this is just an alternate solution. If you are facing the same problem you can use it.