大神们别跑呀。。。。求一个双向滑动进度条的效果 本帖最后由 enkezhang 于 2013-03-22 10:35:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没做过。推荐你去看一下SeekBar的源码,会对你自定义开发这个空间有帮助。 其实没必要看seekbar或者progressbar的源码什么的,就是一张背景加两个按钮就可以了,监听按钮的滑动事件,然后实时重绘背景的颜色即可。 话说自定义View实现起来相对容易一点吧?两头就是两圆形下面那条就是一条被加粗的线条而已通过onTouch事件来监听两头的改变然后重绘那一条Line就好 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; } }伪代码大概这样自己改一下 我去 - - 伪代码逻辑都写好了还不详细啊?图片的话就把drawCircle 换成drawBitmap中间那条线你附的原图上不也有么?如果你想要图片代替也成 list数组绑定ListView实时更新数据ListView置顶问题,求教育 如何清空android ListView控件的内容 为什么DatePicker无法正常显示 ffmpeg软解码渲染花屏 android新手求解答 请问jni下如何画位图 智能手机平台开发工程师 android 中文语音朗读文本 关于在一界面的按钮弹出另一个界面的问题 Android开发初学,activity和fragment如何通信 用Eclipse编写安卓程序,模拟器能够打开,但是不运行我编写的程序,在程序列表中也找不到 webservice怎么保存语音文件?
两头就是两圆形
下面那条就是一条被加粗的线条而已通过onTouch事件来监听两头的改变然后重绘那一条Line就好
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;
}
}伪代码大概这样自己改一下
图片的话就把drawCircle 换成drawBitmap
中间那条线你附的原图上不也有么?如果你想要图片代替也成