ImageButton setBackgroundDrawable九个补丁不会缩放

时间:2012-06-14 22:22:10

标签: android imagebutton nine-patch

buttons

以下是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" />

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

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不起作用。 我怎么能解决这个问题?

1 个答案:

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