拖一个view onLongClick 开始activity onClick
Drag a view onLongClick and start activity onClick
我正在为这个问题苦恼,这个问题可能很简单,但由于我是这个主题的新手,所以我还没有弄明白。
我已经使用 onTouch
方法成功实现了拖动视图。我还成功实施了 onLongClick
和 onClick
方法。但是这两个功能都是分开实现的。
问题,如标题所说,是我想加入这些功能的时候。我希望在用户长按视图时调用 onTouch
方法,并且我希望在用户单击视图时启动新的 activity 方法。
这是伪代码:
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/ 但仍然不知道该怎么做。
(我希望在 android 手机上具有与通知类似的功能)
所以我找到了一个解决方案,它可能是也可能不是一个好的解决方案,但现在它可以满足我的功能。如果有人有更好的解决方案并且认为我的在某些方面不好,请这样说。
代码如下:
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;
}
我正在为这个问题苦恼,这个问题可能很简单,但由于我是这个主题的新手,所以我还没有弄明白。
我已经使用 onTouch
方法成功实现了拖动视图。我还成功实施了 onLongClick
和 onClick
方法。但是这两个功能都是分开实现的。
问题,如标题所说,是我想加入这些功能的时候。我希望在用户长按视图时调用 onTouch
方法,并且我希望在用户单击视图时启动新的 activity 方法。
这是伪代码:
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/ 但仍然不知道该怎么做。
(我希望在 android 手机上具有与通知类似的功能)
所以我找到了一个解决方案,它可能是也可能不是一个好的解决方案,但现在它可以满足我的功能。如果有人有更好的解决方案并且认为我的在某些方面不好,请这样说。
代码如下:
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;
}