0

纽扣

这是 2 个屏幕截图,它们的大小不同,因为左边来自模拟器,右边来自设备。应该从设备中取出两者,对此感到抱歉。

两者都使用相同的drawable。

左:布局中设置的背景:

        <ImageButton
        android:id="@+id/backFromOldCurves"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/backunpressed"
        android:paddingLeft="10sp"
        android:paddingRight="10sp"
        android:src="@drawable/navigationpreviousitem" />

右:在 onTouch on ACTION_UP 中动态设置的背景:

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backpressed));

    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backunpressed));
        onClick(v);

    }

    return true;

}

在 setBackgroundDrawable 中将 Drawable 转换为 NinePatchDrawable 不起作用。我怎么能解决这个问题?

4

1 回答 1

1

为什么你不使用

v.setBackgroundResource(R.drawable.backpressed);

?

编辑:不要在 onTouch() 中返回 true。返回 false ,当 MotionEvent.ACTOIN_UP 被触发时,您不必调用 onClick() 。

public boolean onTouch(final View v, final MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        v.setBackgroundResource(R.drawable.backpressed);
    case MotionEvent.ACTION_UP:
        v.setBackgroundResource(R.drawable.backunpressed);
    default:
        Thread.sleep(50); // sleep for performance, otherwise you'd get flooded with ACTION_MOVE
    }
    return false; // return false to not consume the event
}
于 2012-06-16T12:12:31.520 回答