5

seekBarカメラズームコントローラーとしてアンドロイドを使用しています。

シーク バーはドラッグ時に魅力的に機能しますが、進行状況をインクリメントする zoomIn および zoomOut ボタンを追加したいと考えました。問題は 2 つあります。

  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){ }
      }
    });
    

誰でも助けてもらえますか?

添加:

これは、seekBar の代わりに使用している verticalSeekBar クラスです。

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;
}

}

そして私はそれを私の活動に次のように追加しています:

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);
4

2 に答える 2

10

VerticalSeekbar クラスで setProgress をオーバーライドすることで問題を解決しました。 @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }

于 2013-07-05T04:36:06.990 に答える
3

updateThumb() を作成します。VerticalSeekbar のメソッド

    public void updateThumb(){
         onSizeChanged(getWidth(), getHeight(), 0, 0);
    }

そして、進行状況を設定した後、更新サム メソッドを呼び出します。

seekBar.setProgress(100 - (int) progress);
seekBar.updateThumb();
于 2013-09-19T09:53:00.307 に答える