我正在用这个问题敲打我的脑袋,这可能很简单,但由于我是这个话题的新手,我还是无法弄明白。
我已成功实施了使用onTouch
方法拖动视图。我还成功实施了onLongClick
和onClick
方法。但这两种功能都是分开实施的。
问题,就像标题所说的那样,当我想加入这些功能时。我希望在用户长时间点击视图时调用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;
}
}
}
就像我说的那样,如果我不尝试从onTouch
方法调用它,onLongClick
就会自行工作。如果我尝试从onTouch(View view, MotionEvent event)
方法调用onLongClick
,则会出现问题,因为onLongClick
只会收到两个参数中的一个onTouch
方法应该接收({ {1}}只接收视图参数,但它也应该接收事件参数)。
也许我试图以完全错误的方式做到这一点,但我一直在寻找一些文档,例如https://developer.android.com/training/gestures/但仍然不知道该怎么做。
(我希望在android手机上有类似的功能)
答案 0 :(得分:0)
因此,我提出了一个解决方案,该解决方案可能会或可能不是一个很好的解决方案,但现在它可以提供我的功能。如果有人有更好的解决方案,并认为我的方式不好,请说
。代码如下:
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;
}