在长单击时拖动视图并在单击时启动活动



我正在用这个问题敲打我的头,这可能很简单,但由于我是这个话题的新手,我不知何故还无法弄清楚。

我已经成功地实现了使用onTouch方法拖动视图。我还成功地实现了onLongClickonClick方法。但是这两个功能都是单独实现的。

正如标题所说,问题是我想加入这些功能的时间。我希望在用户长时间单击视图时调用onTouch方法,并希望在用户单击视图时启动新活动。

这是伪代码:

public class Website extends AppCompatActivity implements View.OnTouchListener{
TextView longpress;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_website);
longpress = (TextView) findViewById(R.id.longpress);
longpress.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view){
//I don't really know how to do this part
onTouch(View view, Motion Event event);
return true;
}
});
longpress.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//Code for new activity comes here (I know how to do this part)
}
});
}
public boolean onTouch(View view, MotionEvent event) {
switch(event.getAction(){
case MotionEvent.ACTION_DOWN:
//Save initial coordinates of view <-- view.getX(), view.getY() 
break;
case MotionEvent.ACTION_MOVE:
//Calculate dX and dY and setX and Y of the view (move view)
break;
case MotionEvent.ACTION_UP:
//If view is certain distance away from initial points do something
break;
}
}
}

就像我说的,如果我不尝试从onLongClick方法调用它,onTouch自己工作。如果我尝试从onLongClick方法调用onTouch(View view, MotionEvent event),则会出现问题,因为onLongClick只接收方法应接收的两个参数中的一个onTouch(onLongClick只接收视图参数,但也应该接收事件参数(。

也许我试图以完全错误的方式做到这一点,但我一直在查看一些文档,例如 https://developer.android.com/training/gestures/但仍然不知道该怎么做。

(我希望具有与安卓手机上的通知类似的功能(

所以我得出了一个解决方案,它可能是一个好的解决方案,也可能不是一个好的解决方案,但现在它为我的功能服务。如果有人有更好的解决方案,并认为我的解决方案在某些方面很糟糕,请说出来。

这是代码:

boolean flag;
public boolean onTouch(View view, MotionEvent event){
int action = event.getAction() & MotionEvent.ACTION_MASK;
if(action == MotionEvent.ACTION_DOWN){
//do something on a down press
flag = true;
return true;
}
if(action == MotionEvent.ACTION_UP && flag == true){
//do something if we move finger away from screen we 
//didn't move the view first
return true;
}
if(action == MotionEvent.ACTION_UP && flag == false){
//do something if we move finger away from screen and we moved 
//the view before we moved the finger away from screen
}
if(action == MotionEvent.ACTION_MOVE){
//do something when moving the view
flag = false;
}

最新更新