android - 我可以使用 setProgress 以编程方式更改搜索栏吗

标签 android android-camera seekbar zooming

我正在使用 android seekBar 作为相机变焦 Controller 。

搜索栏在拖动时就像一个魅力,但我想添加一个放大和缩小按钮来增加进度。问题是双重的。

  1. 当我点击按钮时,我必须点击它 4 次才能真正增加进度

  2. 它没有更新进度条上的可拖动缩略图

    btn_zoomIn.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        try {
          zoomCtrl.setProgress(zoomCtrl.getProgress()+1);
          onProgressChanged(zoomCtrl, zoomCtrl.getProgress(), true);
        } catch(Exception ex) { }
      }
    });
    
    btn_zoomOut.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        try {
          zoomCtrl.setProgress(zoomCtrl.getProgress()-1);
        } catch(Exception ex){ }
      }
    });
    

有人可以帮忙吗?

添加:

这是我正在使用的 verticalSeekBar 类,而不是 seekBar:

public class VerticalSeekBar extends SeekBar {

/**
 * Instantiates a new vertical seek bar.
 *
 * @param context the context
 */
public VerticalSeekBar(Context context) {

    super(context);
}

/**
 * Instantiates a new vertical seek bar.
 *
 * @param context the context
 * @param attrs the attrs
 * @param defStyle the def style
 */
public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {

    super(context, attrs, defStyle);
}

/**
 * Instantiates a new vertical seek bar.
 *
 * @param context the context
 * @param attrs the attrs
 */
public VerticalSeekBar(Context context, AttributeSet attrs) {

    super(context, attrs);
}

/* (non-Javadoc)
 * @see android.widget.AbsSeekBar#onSizeChanged(int, int, int, int)
 */
protected void onSizeChanged(int w, int h, int oldw, int oldh) {

    super.onSizeChanged(h, w, oldh, oldw);
}

/* (non-Javadoc)
 * @see android.widget.AbsSeekBar#onMeasure(int, int)
 */
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(heightMeasureSpec, widthMeasureSpec);
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}

/* (non-Javadoc)
 * @see android.widget.AbsSeekBar#onDraw(android.graphics.Canvas)
 */
protected void onDraw(Canvas c) {

    c.rotate(-90);
    c.translate(-getHeight(), 0);

    super.onDraw(c);
}

/* (non-Javadoc)
 * @see android.widget.AbsSeekBar#onTouchEvent(android.view.MotionEvent)
 */
@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:
        setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
        onSizeChanged(getWidth(), getHeight(), 0, 0);
        break;

    case MotionEvent.ACTION_CANCEL:
        break;
    }
    return true;
}

我正在将它添加到我的 Activity 中:

zoomCtrl = new VerticalSeekBar(this);
        zoomCtrl.setLayoutParams(zCtrl);

        zoomCtrl.setProgressDrawable(getResources().getDrawable(R.drawable.zoombar_progress_bg));
        zoomCtrl.setThumb(getResources().getDrawable(R.drawable.imagebtn_zoom_thumb));
        zoomCtrl.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_track));
        zoomCtrl.setPadding(25, 0, 25, 0);
        zoomCtrl.setOnSeekBarChangeListener(this);


        rel.addView(zoomCtrl);

最佳答案

通过覆盖 VerticalSeekbar 类中的 setProgress 解决了这个问题。 @Override public synchronized void setProgress(int progress) { super.setProgress(进度); onSizeChanged(getWidth(), getHeight(), 0, 0); }

关于android - 我可以使用 setProgress 以编程方式更改搜索栏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764411/

相关文章:

java - 将伦敦时间和日期转换为 GMT +6 时间和日期

android - 如何解决某些 Android 设备上前置摄像头视频录制的伪影问题?

Android setFocusArea 和自动对焦

android - 在 Android 上选择/单击图像的正确解决方案

android - 更改默认搜索栏颜色

android - Web/Android/iOS - 内部链接 - 寻找想法/解决方案。

android - 膨胀类 com.google.android.material.tabs.TabLayout 时出错

java - 在 android 中暂停一个类并开始另一个类,反之亦然

android - Activity 结束后如何保持亮度设置?

android - 是否可以将 SeekBar 的拇指图像延伸到栏外?