繁体   English   中英

Android ImageButton 交换资源留下“残留物”

[英]Android ImageButton swap resource leaves 'residue'

我有 2 张图片:

IMG_1:

在此处输入图片说明

IMG_1_PRESSED:

在此处输入图片说明

我默认显示 IMG_1,但是当我点击它时,图像应该更改为 IMG_1_PRESSED。

这是按钮本身的代码片段,其中be是包含正确可绘制对象的enum

    ImageButton ib = new ImageButton(this.context);
    
    ib.setImageResource(be.getDrawable());
    ib.setScaleType(ImageButton.ScaleType.CENTER_INSIDE);
    ib.setBackgroundColor(Color.TRANSPARENT);
    ib.setPadding(0, 0, 0, 0);
    
    ib.setAdjustViewBounds(true);
    ib.setMaxWidth(width);
    ib.setMaxHeight(height);

    setStrengthListener(ib, be);

这是setStrengthListener方法:

private void setStrengthListener(final ImageButton ib, final ButtonEnum be){
    ib.setOnTouchListener(new View.OnTouchListener() {
        
        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    ib.setImageResource(be.getDrawablePressed());
                    return true;
                case MotionEvent.ACTION_UP:
                    ib.setImageResource(be.getDrawable());
                    return true;
            }
            return false;
        }
    });
}

现在两个图像都是 480x240, widthheight分别设置为设备的宽度/3 和设备的宽度/6(我想显示 3 个图像,因此是 /3)。

这是问题,如果按下按钮,我会得到这个:

在此处输入图片说明

在按下的按钮下面有一条小线......我已经尝试了很多来解决这个问题,但不知何故,这条小线已经成为我今天最大的敌人。

作为额外的努力:如果我将原始资源设置为 IMG_1_PRESSED,该行不再显示:

    ImageButton ib = new ImageButton(this.context);
    
    ib.setImageResource(be.getDrawablePressed());
    ib.setScaleType(ImageButton.ScaleType.CENTER_INSIDE);
    ib.setBackgroundColor(Color.TRANSPARENT);
    ib.setPadding(0, 0, 0, 0);
    ....etc

但显然我不想从按下按钮开始。

亲爱的 Android 专家,我在这里做错了什么?

这是我所知道的最简单的解决方案,试试这个

Drawable文件夹中创建 Xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_pressed_img"android:state_pressed="true" />
<item android:drawable="@drawable/btn_normal_image" />
</selector>

然后将此可绘制文件作为背景添加到您的View

例子 :

<ImageView
    android:id="@+id/enter_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:maxHeight="100dip"
    android:maxWidth="100dip"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:background="@drawable/enter_btn" />

或在 Java 代码中

yourView.setImageResource(R.drawable.*drawablefile*);

您也可以使用ImageButtonImageView看起来比ImageButton更好,因为它没有按钮边框。

因此,经过大量的反复试验,我设法摆脱了那条灰线。 最后它真的很简单,虽然我不完全确定为什么要修复它:

主要布局

    LinearLayout ll = new LinearLayout(this);
    ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setGravity(Gravity.TOP);

视图创建(imageview 的布局不变):

ImageView iv = tbb.getTopBarButton(ButtonEnum.IMG_1);

LinearLayout iViewLayout = new LinearLayout(this);
iViewLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
iViewLayout.setOrientation(LinearLayout.HORIZONTAL);

iViewLayout.addView(iv);

ll.addView(iViewLayout);

每个图像视图添加单独的布局似乎删除了灰线。 很想知道为什么这行得通,但为了将来参考,至少我希望能帮助别人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM