【问题标题】:ImageButton setBackgroundDrawable nine patch wont scaleImageButton setBackgroundDrawable 九个补丁不会缩放
【发布时间】:2012-06-14 22:22:10
【问题描述】:

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

【问题讨论】:

  • 我不知道这是否会对您的实际问题有所帮助,但您应该只使用sp 来调整文本大小。 dipdp 应用于布局大小和填充/边距。此外,您应该真正使用Selector 按钮。更多信息:stackoverflow.com/questions/3506319/…
  • 我对选择器感到厌烦,但它不适用于图像按钮。我想为 android:src 和 android:background 设置 2 张不同的图片。但也许我只是选错了。将再次调查。
  • Android 文档有一个选择器作为 ImageButton 的示例之一:developer.android.com/reference/android/widget/ImageButton.html。另外:“元素的顺序很重要,因为它们是按顺序评估的。这就是为什么“正常”按钮图像排在最后的原因,因为它只会在 android:state_pressed 和 android:state_focused 都被评估为 false 之后应用。”
  • 是的,您可以确切地看到问题所在。我想将右箭头(android:src =“...”)留在原处,只更改背景触摸。为了使用选择器,我必须将其设置为 android:src="".
  • 创建一个只改变背景而箭头保持不变的图像?

标签: android imagebutton nine-patch


【解决方案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
}

【讨论】:

  • 感谢 ontouch 提示,不知道。我会尝试 setBackgroundResource 方法,如果它有效,我会告诉你
  • 通过 setBackgroundResource() 设置图像对您有帮助吗?如果是这样,请将上面的帖子标记为解决方案。
  • 同样的东西不会按比例缩放,应该缩放的区域的黑线是可见的。我重新设计了应用程序,不再需要它了。如果您将问题编辑为:似乎九个补丁仅在带有 android:background="" 的 xml 中使用时才会正确缩放,我会接受它,所以其他人会看到正确的答案。
  • 对不起,我不能。这不会是正确的。您的代码似乎有错误。我还在以编程方式设置 NinePatchDrawables。然而,它对我有用。用ImageView 代替ImageButton 怎么样? (但在这两种情况下,上面的代码应该工作。)
  • 好吧,我以为它永远无法正确缩放。然后我会再次尝试上述方法并报告,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多