【问题标题】:Making buttons work while sliding over them在按钮上滑动时使按钮工作
【发布时间】:2016-11-02 10:52:12
【问题描述】:

我正在开发一个钢琴应用程序,目前我正在做一些事情,以使我的按钮在我用手指滑过时可以正常工作。

这里有更全面的解释:

Here is what happens when i move my finger outside of this button, without releasing my finger

Here is what I would like to have when I slide my finger to another button - button which was touched first, stops working, becomes green and button which i enter with my finger works, so it turns red

我的代码:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/imageButtonSelector"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/new_button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

new_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/redcolor"
        android:state_pressed="true" />
    <item android:drawable="@drawable/orange"
        android:state_focused="true" />
    <item android:drawable="@drawable/greencolor" />

</selector>

MainActivity.java

package com.example.android.focus;

import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

Button imageButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addListenerOnButton();

}

public void addListenerOnButton() {

    imageButton = (Button) findViewById(R.id.imageButtonSelector);

    imageButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Toast.makeText(MainActivity.this,
                    "ImageButton (selector) is clicked!",
                    Toast.LENGTH_SHORT).show();

        }

    });

}

}

我需要做什么才能使我的应用程序按预期工作? 任何帮助将不胜感激!

【问题讨论】:

  • 不,不。不是 onClickListener,您需要一个 onTouchListener,因为您需要找出手指何时向下、向上(在向下之后)以及手指何时移动。此外,由于它是一架钢琴,而且人们很少一次只弹一个琴键,因此您需要了解 Android 是如何处理多点触控事件的。

标签: android android-studio


【解决方案1】:

由于您将在多个按钮上滑动,我认为在每个按钮上实现 onclick 侦听器不会完成您想要的操作

但我可以建议你两种方法 尝试创建一个自定义视图(也许使用一堆矩形创建您自己的带有 android 视图组的钢琴布局,并处理您的触摸手势、动作移动、向下 ..)

或者如果您仍然需要按钮,我想您将不得不使用 android 多点触控事件并创建您的自定义按钮来扩展 appcompatbutton 类,以便它检测到按钮上的滑动

希望对你有所帮助

【讨论】:

  • 您能解释一下答案的最后一部分吗?我会很感激
  • 您可以执行类似此类的公共类 CustomButton 扩展 AppCompatButton 并覆盖其触摸事件,以便您可以更改触摸在常规按钮中的工作方式,但我更喜欢第一个建议,因为它会更简单一个视图组,你必须从头开始处理触摸你有很大的灵活性来添加你的手势
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2021-05-14
  • 2014-03-05
  • 1970-01-01
  • 2017-12-11
相关资源
最近更新 更多