カテゴリー
Android Java

カスタムTouch Controlを作ってみた

スクリーン上で指を上下させることで値を増減させられるコントローラーを書いてみました。

private class OnAreaTouched implements View.OnTouchListener {

    double initialY = 0.0;
    double previousY = 0.0;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
      switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
          initialY = event.getY();
          break;
        case MotionEvent.ACTION_MOVE:
          double currentY = event.getY();
          // if finger initially went upwards, then changed it's direction to downwards
          if(currentY < initialY && currentY > previousY) {
            initialY = previousY;
          }
          // if finger initially went downwards, then changed it's direction to upwards
          if(currentY > initialY && currentY < previousY) {
            initialY = previousY;
          }
          double diff = (initialY - currentY) / 100;
          Log.d("MyTest", "initial: " + initialY + ", getY(): " + event.getY() + ", diff: " + diff);
          mValue = mValue + diff;
          // upper bound 400, lower bound 20
          mValue = Math.max(Math.min(mValue, 400), 20);
          String mValueString = "" + (int)mValue;
          SpannableString mValueSpanString = new SpannableString(mValueString);
          mValueSpanString.setSpan(new StyleSpan(Typeface.BOLD), 0, mValueSpanString.length(), 0);
          mValueTV.setText(mValueSpanString);
          previousY = event.getY();
          break;
        default:
          break;
      }
      return true;
    }
}