如何在长按按钮时发送字符流
Posted
技术标签:
【中文标题】如何在长按按钮时发送字符流【英文标题】:How to send a stream of characters on long press of button 【发布时间】:2016-05-25 06:55:54 【问题描述】:。 这是按钮LongClick的代码,
btnDown.setOnLongClickListener(new View.OnLongClickListener()
@Override
public boolean onLongClick(View v)
sendMessage("S");//Here I wanted to send for example SSSSS on long press of that button
);
我想在长按按钮时发送一个字符流,直到用户释放按钮。
【问题讨论】:
您是否考虑过触地和向上操作? 不。我有按钮。单击按钮时,我需要执行此操作。 您可以轻松地为按钮添加一个触摸监听器。 ***.com/questions/11779082/… 没关系。我可以使用 click ClickListeners 按钮,但我的问题是, 【参考方案1】:像这样尝试自定义Listner
String mString="";
public class ContinousRepeatListener implements View.OnTouchListener
private Handler handler = new Handler();
private int initialInterval;
private final int normalInterval;
private final View.OnClickListener clickListener;
private Runnable handlerRunnable = new Runnable()
@Override
public void run()
handler.postDelayed(this, normalInterval);
clickListener.onClick(downView);
;
private View downView;
/**
* @param initialInterval The interval after first click event
* @param normalInterval The interval after second and subsequent click
* events
* @param clickListener The OnClickListener, that will be called
* periodically
*/
public ContinousRepeatListener (int initialInterval, int normalInterval,
View.OnClickListener clickListener)
if (clickListener == null)
throw new IllegalArgumentException("null runnable");
if (initialInterval < 0 || normalInterval < 0)
throw new IllegalArgumentException("negative interval");
this.initialInterval = initialInterval;
this.normalInterval = normalInterval;
this.clickListener = clickListener;
public boolean onTouch(View view, MotionEvent motionEvent)
switch (motionEvent.getAction())
case MotionEvent.ACTION_DOWN:
handler.removeCallbacks(handlerRunnable);
handler.postDelayed(handlerRunnable, initialInterval);
downView = view;
downView.setPressed(true);
clickListener.onClick(view);
return true;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
handler.removeCallbacks(handlerRunnable);
downView.setPressed(false);
downView = null;
return true;
return false;
并像这样使用
btnDown.setOnTouchListener(new ContinousRepeatListener(400, 100, new View.OnClickListener()
@Override
public void onClick(View view)
// the code to execute repeatedly
mString += "S";
tvString.setText(mString);
));
【讨论】:
每次字符串长度为 736 时,都不会发生长按。我希望按钮的工作方式与键盘键的工作方式相同。【参考方案2】:使用 setOnTouchListener 并在 ACTION_DOWN 上写下你的 sendMessage 代码
【讨论】:
我有 4 个按钮,如左、右、下和上。有没有办法使用LongClickListeners
?以上是关于如何在长按按钮时发送字符流的主要内容,如果未能解决你的问题,请参考以下文章
Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析(示例代码