适用于Android 4的垂直搜索栏

问题描述 投票:-1回答:2

我从here获得了以下代码,它绘制了一个垂直搜索栏:

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.SeekBar;

public class VerticalSeekBar extends SeekBar {
    private static final int ROTATION_ANGLE = -90;

    private OnSeekBarChangeListener mOnSeekBarChangeListener;

    public VerticalSeekBar(final Context context) {
        super(context);
    }

    public VerticalSeekBar(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);
    }

    public VerticalSeekBar(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected final void onSizeChanged(final int width, final int height, final int oldWidth, final int oldHeight) {
        super.onSizeChanged(height, width, oldHeight, oldWidth);
    }

    @Override
    protected final synchronized void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
    }

    @Override
    protected final void onDraw(final Canvas c) {
        c.rotate(ROTATION_ANGLE);
        c.translate(-getHeight(), 0);

        super.onDraw(c);
    }

    @Override
    public final void setOnSeekBarChangeListener(final OnSeekBarChangeListener l) {
        mOnSeekBarChangeListener = l;
        super.setOnSeekBarChangeListener(l);
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public final boolean onTouchEvent(final MotionEvent event) {
        if (!isEnabled()) {
            return false;
        }

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
            mOnSeekBarChangeListener.onStartTrackingTouch(this);
            break;

        case MotionEvent.ACTION_MOVE:
            setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
            break;

        case MotionEvent.ACTION_UP:
            setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
            mOnSeekBarChangeListener.onStopTrackingTouch(this);
            break;

        case MotionEvent.ACTION_CANCEL:
            mOnSeekBarChangeListener.onStopTrackingTouch(this);
            break;

        default:
            break;
        }

        return true;
    }

    @Override
    public final void setProgress(final int progress) {
        super.setProgress(progress);
        onSizeChanged(getWidth(), getHeight(), 0, 0);
    }
}

这段代码在Android 2.3上运行良好,但在Android 4.2.2中,拇指卡在滑块栏的底部:

android android-seekbar
2个回答
0
投票

也许是因为中的零

onSizeChanged(getWidth(),getHeight(),0,0);

这是少数几件手工改变的东西之一。

此外,我注意到代码正在4.4.4和4.1.2上工作。

/编辑/

这个包正在运行:http://560b.sakura.ne.jp/android/VerticalSlidebarExample.zip感谢Andro Selva


0
投票

ipwcheat:套(CustomInterface(圆((show_circle,真)(Y,574)(X,1651)(缩放,3.0)(btn_type,聚焦)(跑步,真))搜索条((垂直,假)(翻转,假)(Y,1005)(X,635)(缩放,5.0)(跑步,真))))

© www.soinside.com 2019 - 2024. All rights reserved.