在Android中的另一个类中获取背景资源

时间:2013-03-31 11:19:19

标签: android android-resources ontouchlistener

我在Android应用程序中有很多按钮,我想创建一个单独的类来处理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,那么我会获得后台资源并向其添加“按”,然后将其设置为后台资源,如果它是event ACTION_UP则获取后台资源并从资源名称中删除“press”并将其设置为新的后台资源。

我尝试使用getResources(),但无法弄清楚究竟是怎么做的。

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

2 个答案:

答案 0 :(得分: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);

您应该能够将两种方法结合起来,以达到您的需求。

答案 1 :(得分: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>