繁体   English   中英

按住按钮更改速度平稳增加的值

[英]Change a value smoothly increasing in speed by holding down a button

我几天来一直在蒸蒸日上。 我尝试为int-limits内的大范围数字提供选择器。 您应该按住一个按钮,并且该值应缓慢变化,并且按下时间越长,变化速度越快。 你们都知道那种按钮,不是吗? :D输入数字必须准确,但速度要快。 我使用OnTouchListener 该事件允许.getDownTime()

我做了很多尝试,但是总是只能跳过数字(不是真的,但是使用起来太快),或者在按住按钮时不会重复增加数值。 如果运行时没有任何变化,它的运行速度非常快,但是如果保持足够长的时间开始跳跃10 100或1000跳,那就很好了。

我准备了一个如下所示的SSCCE:

SSCCE的屏幕截图

public class ValueChangerSSCCE extends Activity implements OnTouchListener {

Button plusButton;
TextView valueView;
Button minusButton;
int value;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);

    plusButton = new Button(this);
    plusButton.setText("+");
    plusButton.setTextSize(120f);
    plusButton.setOnTouchListener(this);
    layout.addView(plusButton);

    valueView = new TextView(this);
    valueView.setGravity(Gravity.CENTER_HORIZONTAL);
    valueView.setTextColor(Color.WHITE);
    valueView.setText(value + "");
    valueView.setTextSize(120f);
    layout.addView(valueView);

    minusButton = new Button(this);
    minusButton.setText("-");
    minusButton.setTextSize(120f);
    minusButton.setOnTouchListener(this);
    layout.addView(minusButton);

    setContentView(layout);
}

/* 
 * Called when a button is pressed
 */
@Override
public boolean onTouch(View v, MotionEvent event) {

    if (v == plusButton) {
        value++;
    } else if (v == minusButton) {
        value--;
    }
    valueView.setText(value + "");

    return false;
}
}

对于分辨率较低的设备,可能必须减小文本大小。

提前致谢!

看一下NumberPicker源代码 这是SDK中的小部件,除了没有加速之外,它确实可以执行您所描述的操作。 像在此处那样使用对Handler后调用是处理计时事件的最佳方法。 您需要对此类进行的唯一添加操作是根据停机时间更改post回调中的mSpeed值(并可能更改增量)。

HTH。

我尝试解决此问题的方法如下:

按+或-将启动线程。 线程以偏移量值按设置的时间间隔更新数字,如果数字已更改20次以上,则减小间隔,以便数字更新更快;如果数字仍在变化很多,则偏移量值将增大为跳过数字。 记住所有这些都是在线程中发生的。

当用户抬起手指时,线程被杀死,并且偏移,间隔被重置。

使用getDownTime()的值可以计算计数器的增量。

首先,设计您想要的响应曲线。 (也就是说,确定一个函数,该函数定义该值应如何随触摸时间以及可能是起始值而变化。从描述的角度来看,它不应是直线函数。)

然后,使您的增量遵循曲线。 在上一次事件中可能有助于存储按钮值和停机时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM