本帖最后由 enkezhang 于 2013-03-22 10:35:20 编辑

解决方案 »

  1.   

    没做过。推荐你去看一下SeekBar的源码,会对你自定义开发这个空间有帮助。
      

  2.   

    其实没必要看seekbar或者progressbar的源码什么的,就是一张背景加两个按钮就可以了,监听按钮的滑动事件,然后实时重绘背景的颜色即可。
      

  3.   

    话说自定义View实现起来相对容易一点吧?
    两头就是两圆形
    下面那条就是一条被加粗的线条而已通过onTouch事件来监听两头的改变然后重绘那一条Line就好
      

  4.   

    class MyView extends View { private float leftX;
    private float rightX;
    private float circleY;
    private static final float circleR = 10.0f; public MyView(Context context) {
    super(context);
    leftX = 20.0f;
    rightX = 200.0f;
    } @Override
    protected void onDraw(Canvas canvas) {
    circleY = canvas.getHeight()/2;
    //Paint自己加
    canvas.drawCircle(circleY, leftX, circleR, null);
    canvas.drawCircle(circleY, rightX, circleR, null);
    canvas.drawLine(leftX, circleY, rightX, circleY, null);
    super.onDraw(canvas);
    }

    private static final int TOUCH_LEFT = 0;
    private static final int TOUCH_RIGHT = 1;
    private static final int TOUCH_NONE = 2;
    private int touchWho = TOUCH_NONE;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    if(isTouchCircle(circleR, leftX, circleY, event.getX(), event.getY()))
    touchWho = TOUCH_LEFT;
    else if(isTouchCircle(circleR, rightX, circleY, event.getX(), event.getY()))
    touchWho = TOUCH_RIGHT;
    else 
    touchWho = TOUCH_NONE;
    return true;
    case MotionEvent.ACTION_MOVE:
    if(touchWho == TOUCH_LEFT){
    leftX = event.getX();
    invalidate();
    }else if(touchWho == TOUCH_RIGHT){
    rightX = event.getX();
    invalidate();
    }else{
    break;
    }
    return true;
    case MotionEvent.ACTION_UP:
    if(touchWho != TOUCH_NONE)
    touchWho = TOUCH_NONE;
    return true;
    }
    return super.onTouchEvent(event);
    }

    private boolean isTouchCircle(float r,float cx,float cy,float mx,float my){
    if((mx>=cx-r||mx<=cx+r)&&(my>=cy-r||my<=cy+r))
    return true;
    return false;
    }
    }伪代码大概这样自己改一下
      

  5.   

    我去 - - 伪代码逻辑都写好了还不详细啊?
    图片的话就把drawCircle 换成drawBitmap
    中间那条线你附的原图上不也有么?如果你想要图片代替也成