2

我在 Android 应用程序中有很多 Button,我希望创建一个单独的类来处理 Touch 事件。

所以我创建了以下类:

public class OnTouchButtonEffects implements OnTouchListener{

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)                        
            v.setBackgroundResource(R.drawable.buttonbluepress);
        else if(event.getAction() == MotionEvent.ACTION_UP)
            v.setBackgroundResource(R.drawable.buttonblue);
    }
}

现在我想要如果view vevent ACTION_DOWN那么我得到后台资源并将“press”附加到它,然后将其设置为后台资源,如果它event ACTION_UP得到后台资源并从资源名称中删除“press”并将其设置为新的后台资源.

我尝试使用getResources()但无法弄清楚究竟是如何完成的。

所以问题是我如何获取后台资源的名称,并从其名称中追加/删除。

4

2 回答 2

1

该类Resources有这个方法:

public int getIdentifier (String name, String defType, String defPackage) 

看看http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29

因此,您可以通过名称获取资源的 id。获得 id 后,您可以设置背景。

如果您想从 id 中了解资源名称,请使用:

getResources().getResourceEntryName(int resid);

或者

getResources().getResourceName(int resid);

您应该能够结合这两种方法来实现您所需要的。

于 2013-03-31T14:09:18.123 回答
1

我不相信您可以按照您要求的方式使用资源地址(即 R.id.nameOfResourse)。

我看到了您要完成的工作,并且有一种更简单的方法可以使用自定义按钮:

StateListDrawable http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/buttonbluepress" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/buttonblue" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/buttonblue" /> <!-- hovered -->
    <item android:drawable="@drawable/buttonblue" /> <!-- default -->
</selector>
于 2013-03-31T14:45:08.407 回答