我在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 v
有event ACTION_DOWN
,那么我会获得后台资源并向其添加“按”,然后将其设置为后台资源,如果它是event ACTION_UP
则获取后台资源并从资源名称中删除“press”并将其设置为新的后台资源。
我尝试使用getResources()
,但无法弄清楚究竟是怎么做的。
所以问题是如何获取后台资源的名称,并从名称中追加/删除。
答案 0 :(得分:1)
Resources
类有这个方法:
public int getIdentifier (String name, String defType, String defPackage)
因此,您可以通过其名称获取资源的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>