遇到的问题以及解决方法(长按操作)

来源:互联网 发布:刚度矩阵 编辑:程序博客网 时间:2024/06/07 00:14

最近工作中遇到的一个小问题,记录一下.


需求是这样的,当按钮点击的时候,响应A事件,当按钮长按时响应B事件,当长按结束或者B事件执行一定次数后,结束B事件.


思路:

1.给按钮设置点击事件,响应A

2.给按钮摄者长按事件,响应B

3.给按钮添加onTouchListener


上代码

MainActivity,处理逻辑

public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener, View.OnTouchListener {    private static final String TAG = MainActivity.class.getSimpleName();    private Button btn;    private MyThread myThread;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn = (Button) findViewById(R.id.btn);        btn.setOnClickListener(this);        btn.setOnLongClickListener(this);        btn.setOnTouchListener(this);    }    @Override    public void onClick(View view) {        Log.d(TAG, "onClick: 处理A事件");    }    @Override    public boolean onLongClick(View view) {        //开启子线程,处理B事件        myThread = new MyThread();        myThread.start();        return false;    }    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        if (motionEvent.getAction() == MotionEvent.ACTION_UP &&myThread!=null){            Log.d(TAG, "onTouch: B事件手动停止");                myThread.flag = false;                return true;        }        return false;    }}
MyThread,处理B事件

public class MyThread extends Thread {    private static final String TAG= MyThread.class.getSimpleName();    public volatile  boolean flag = true;    private int count = 0;    @Override    public void run() {        super.run();        while(flag && count <100){            try {                Thread.sleep(500l);            } catch (InterruptedException e) {                e.printStackTrace();            }                        Log.d(TAG, "run: 事件B"+count++);            if(count == 99){                Log.d(TAG, "run: 事件B执行完自动停止");            }        }    }}


暂时还有个小问题,当按下时,手指移动出了Button的范围,也应该停止处理B事件,等我搞明白了再添加进来


如果你们有其他的解决方法,也可以贴出来,互相学习一下

0 0