是否可以使用ImageButton来触摸并突出显示状态,而不需要在Android上再增加2个图像资源(另外6个,考虑到h / m / ldpi)?我基本上都在寻找类似于iOS的行为,操作系统可以在按钮的触摸状态下放置半字母叠加。
我尝试在onTouch监听器中使用setColorFilter(0xFF000000, Mode.MULTIPLY)
,结果与我之后的结果非常接近 - 但我不确定状态处理的最佳方法是实现此目的:
即
有没有更好的方法......或者有人可以帮助填补空白?
出于几个原因,我不想使用单独的图像 - 它是一个我没有相应资产的iPhone端口,并且考虑到我有低/中/要考虑的高创意。
谢谢!
答案 0 :(得分:1)
如果您对setColorFilter(0xFF000000, Mode.MULTIPLY)
感到满意,那么如何让自己成为扩展ImageButton的自定义组件?
类似的东西:
(对不起,我没有机会测试这个)
package com.example;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;
public class IosImageButton extends ImageButton implements OnTouchListener
{
public IosImageButton(final Context context, final AttributeSet attrs, final int defStyle)
{
super(context, attrs, defStyle);
this.init();
}
public IosImageButton(final Context context, final AttributeSet attrs)
{
super(context, attrs);
this.init();
}
public IosImageButton(final Context context)
{
super(context);
this.init();
}
private void init()
{
super.setOnTouchListener(this);
}
@Override
public boolean onTouch(final View view, final MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
// touchDown event -> Change color overlay. goes here
// e.g. this.setColorFilter(0xFF000000, Mode.MULTIPLY);
return true;
case MotionEvent.ACTION_UP:
// touchUp event -> remove color overlay, and perform button action.
// e.g. this.setColorFilter(0xFF000000, Mode.MULTIPLY);
return true;
default:
return false;
}
}
}
然后是view.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.example.IosImageButton
<!-- add standard ImageButton setting here -->
/>
</RelativeLayout>
答案 1 :(得分:1)
请勿使用触摸事件尝试在此类内容上显示相应的状态。你将不可避免地得到部分错误。该框架在检测用户意图方面做了很多工作(例如:用户降落但随后滑下他的手指)考虑到slop等事情。
对于ImageButton,您可以使用src属性显示图标,然后使用适当的StateListDrawable作为背景。
我创建了一个快速项目供您查看on Github
请注意,触摸状态显示在背景中,而不是前景。请参阅讨论on Google+,了解为什么Android框架工程师认为触摸反馈应该落后,而不是在前面。如果您仍希望将drawable放在前面,请参阅我的帖子on my blog