我的应用中有一排按钮。我想要实现的是:当我将手指拖过按钮时,会调用一个方法。
到目前为止,我的代码看起来像这样:
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.a4web.example.MainActivity">
</LinearLayout>
Java:
public class MainActivity extends AppCompatActivity {
LinearLayout rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = (LinearLayout) findViewById(R.id.activity_main);
for(int i=0; i<5; i++){
Button button = new Button(this);
button.setText(i);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
doSomething();
break;
}
return false;
}
});
rootView.addView(button);
}
}
我的方法doSomething仅在我按下按钮时被调用。当我拖过一个按钮时,我怎么能实现它的调用。我应该听什么样的活动?
答案 0 :(得分:0)
要做到这一点,你必须使用onTouchListener,而不是仅当你按下按钮并释放它时触发的onClickListener。
即使onTouchListener适用于三个事件MotionEvent.ACTION_DOWN(按下时),MotionEvent.ACTION_MOVE(当您拖动手指时),MotionEvent.ACTION_UP(释放按钮时),您仍然需要按下按钮然后拖过它。 这意味着如果您先在按钮外单击,则无法在按钮上显示拖动事件。
如果你想在任何地方点击,然后检查按钮上的拖动事件,这仍然是一个不好的方法。
我建议你让所有视图都可以显示,并在整个视图上实现onTouchListener,并在手指放在视图的特定部分时进行咀嚼。
要做到这一点,使按钮不可点击是很重要的,否则它们将避免整个视图完全可以解决!
如果您想学习如何实现一个可查看的视图,您可以查看此存储库: