我想要实现的应该很容易,但我无法找到它的任何诉求。Android视图隐藏,拖动
我想要一个可拖动的按钮,拖动时应该看不见。
当用户开始拖动此按钮时,我只需要显示按钮的拖影。
到目前为止,我有有复式按钮与他们OnTouchListener
public boolean onTouch(View v, MotionEvent event) {
v.setVisibility(View.INVISIBLE);
v.startDrag(null, new DragShadowBuilder(v), null, 0);
return true;
}
现在我需要另一种方法,在那里我可以重新设置我的按钮可见这个onTouch
功能。
我已经试过了OnDragListener
,但是这个Listener只设置所有的按钮,但不是我实际拖动的按钮?
也许还有另一种方法没有setVisibility
和DragShadowBuilder
?
编辑:
在this教程中,我发现,我可以在我的OnDragListener
使用event.getlocalstate()
来获得所beeing拖动查看。 在那里我可以设置我的视图再次可见。 问题是,此方法始终返回null
。
编辑2:
我创建了一个包含只有三个按键,并且其中的按钮可以删除一个TextView一个新的简单的项目。我使用了教程中的代码,但它仍然不起作用:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
button1.setOnTouchListener(new MyOnTouchListener());
button2.setOnTouchListener(new MyOnTouchListener());
button3.setOnTouchListener(new MyOnTouchListener());
TextView dropArea = (TextView) findViewById(R.id.textView);
dropArea.setOnDragListener(new MyOnDragListener());
}
private class MyOnDragListener implements View.OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()){
case DragEvent.ACTION_DROP:{
View view = (View) event.getLocalState();
if (view == null){
Log.e("SORRY", "NO VIEW!");
}else{
view.setVisibility(View.VISIBLE);
}
}
}
return true;
}
}
private class MyOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.startDrag(null, new View.DragShadowBuilder(v), null, 0);
v.setVisibility(View.INVISIBLE);
return true;
}else{
return false;
}
}
}
}
即使你的代码是正确的,这是行不通的。当调用'startDrag'时,会收到一个'ACTION_CANCEL'事件,并且不会收到更多的'MotionEvents'。 – Project 2016-08-19 18:02:35