结合搜索栏和进度条来创建具有修剪支持的媒体播放器

时间:2014-07-27 22:57:54

标签: android user-interface layout

我们想创建一个播放器/修剪器......

蓝色框内是进度的触摸区域,黄色框中是修剪器,用于设置开始和结束点。

我们正在使用自定义视图,例如" range-seek-bar"以此目的。处理程序图像从搜索栏视图剪切到另一个视图(请参见下图)。 我们试图实现的只是点击那些处理程序的圈子(而不是整个图像)来移动处理程序,但由于这些是位图并且点击是在搜索栏视图之外进行的,我们不能得到OnClick电话。当用户点击那些红色方块时能够听。

enter image description here

非常感谢您的帮助和回复。

1 个答案:

答案 0 :(得分:4)

您可能还想检查此库:https://code.google.com/p/range-seek-bar/

"范围搜索栏"我链接的并不允许拇指外的触摸。然后,您可以修改drawable及其onDraw()以在视觉上自定义它(例如,使其透明)。修改它以使其成为thumbless,用作顶部进度条。所以你有两个:一个是thumbless作为顶部进度条,一个是拇指但透明线作为底部搜索栏。

boolean isNotLineless; // Set this in constructor or a setter
boolean isNotThumbless; // Set this in constructor or a setter

@Override
protected synchronized void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (isNotLineless) {
        // draw seek bar background line
        final RectF rect = new RectF(padding, 0.5f * (getHeight() - lineHeight), getWidth() - padding, 0.5f * (getHeight() + lineHeight));
        paint.setStyle(Style.FILL);
        paint.setColor(Color.GRAY);
        paint.setAntiAlias(true);
        canvas.drawRect(rect, paint);

        // draw seek bar active range line
        rect.left = normalizedToScreen(normalizedMinValue);
        rect.right = normalizedToScreen(normalizedMaxValue);

        // orange color
        paint.setColor(DEFAULT_COLOR);
        canvas.drawRect(rect, paint);
    }

    if (isNotThumbless) {
        // draw minimum thumb
        drawThumb(normalizedToScreen(normalizedMinValue), Thumb.MIN.equals(pressedThumb), canvas);

        // draw maximum thumb 
        drawThumb(normalizedToScreen(normalizedMaxValue), Thumb.MAX.equals(pressedThumb), canvas);
    }
}

对于thumbless版本,也会处理其触摸事件。

public boolean onTouchEvent(MotionEvent event) {

    if (!isEnabled() || !isNotThumbless)
        return false;