java - 在android studio中的OnTouch方法中设置背景

标签 java android ontouchlistener

我正在 android studio 中创建一个钢琴应用程序。我正在使用 onTouch() 方法来检查用户是否按下了按钮,然后播放声音。我为钢琴键创建了两种可绘制资源,一种是在未按下钢琴键时使用,另一种是在按下钢琴键时使用。如何在 onTouch() 方法中设置条件,以便在按下钢琴键和未按下钢琴键时将背景设置为相应的可绘制资源?谢谢!

这是代码 MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
...

 @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (v.getId()) {
            case R.id.p1:
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:{
                        //set the background to key_pressed
                        soundPoolObject.play(c3, 1, 1, 0, 0, 1);
                        break;}
                    case MotionEvent.ACTION_UP:{
                        //set the background to key_normal
                        soundPoolObject.pause(c3);
                        break;}
                }
        }

            return true;
        }
}

可绘制资源key_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#00000000" />
        </shape>
    </item>
    <item android:top="10dp">
        <shape android:shape="rectangle">
            <corners android:radius="5dp" />
                <solid android:color="#FFFFFF"/>
        </shape>
    </item>
</layer-list>

可绘制资源key_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/black_shadow"/>
    <item android:bottom="10dp" >
        <shape android:shape="rectangle" >
            <corners android:radius="5dp" />
                <solid android:color="#FFFFFF"/>
        </shape>
    </item>
</layer-list>

最佳答案

试试这个:

...
            case R.id.p1:
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:{
                        //set the background to key_pressed
                        v.setBackgroundResource(R.drawable.key_pressed);
                        soundPoolObject.play(c3, 1, 1, 0, 0, 1);
                        break;}
                    case MotionEvent.ACTION_UP:{
                        //set the background to key_normal
                        v.setBackgroundResource(R.drawable.key_normal);
                        soundPoolObject.pause(c3);
                        break;}
                }
...

关于java - 在android studio中的OnTouch方法中设置背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61384866/

相关文章:

java - Zuul世界 : non-static method getCurrentRoom() cannot be referenced from a static context

java - 带有图像的 JLabel?

ANDROID_HOME 不覆盖 local.properties

Java:循环思考列表,然后用 if else 检查结果

java - 无法在我的代码中访问 DatePicker.ValidationCallback

android - 未检测到我的 MotionEvent.ACTION_DOWN

android - 检测触摸事件是否发生在 shapeDrawable 中

java - 如何使用 Rome RSS读取元素标签?

java - 删除 ArrayList 中 int[] 指定索引处的值

android - 如何处理 subview 中的点击,以及父 View 组中的触摸?