2013-03-31 29 views
2

我在Android应用程序中有相当多的按钮,我想要创建一个单独的类来处理Touch事件。Android中的另一个类获取背景资源

所以我创建了以下类:

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然后获取后台资源并从资源名称中删除“新闻”并将其设置为其新的后台资源。

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

所以问题是我如何获得背景资源的名称,并追加/删除其名称。

+0

使用'setTag'和'getTag'方法保存或获取View的后台资源ID –

回答

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> 
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); 

你应该能够两种方法相结合,实现你所需要的。