0

ねらい: 上下だけをなでる。

私が試したこと:

以下は私のXMLのコピーです。This Stack Overflow Answerのソリューションに従ってみました。しかし、私の問題は、解決策に従って左右を1dpずつ切り取るオプションを選択できないことです。

何か案は?

コード:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape >
            <gradient
                    android:startColor="@color/secondaryButtonStartColorSelected"
                    android:endColor="@color/secondaryButtonEndColorSelected"
                    android:angle="270" />
            <stroke
                    android:width="@dimen/secondary_button_border_size"
                    android:color="@color/secondaryButtonBorderColorSelected" />

        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                    android:startColor="@color/secondaryButtonStartColorSelected"
                    android:endColor="@color/secondaryButtonEndColorSelected"
                    android:angle="270" />
            <stroke
                    android:width="@dimen/secondary_button_border_size"
                    android:color="@color/secondaryButtonBorderColorSelected"/>

        </shape>
    </item>

</selector>
4

1 に答える 1

0

これを処理するカスタムを作成できますがDrawable、コードと XML で設定する必要があります。ここに簡単で汚いバージョンがあります:

public class HorizontalStrokeDrawable extends Drawable {
    private Paint mPaint = new Paint();
    private int mStrokeWidth;

    public HorizontalStrokeDrawable (int strokeColor, int strokeWidth) {
        mPaint.setColor(strokeColor);
        mStrokeWidth = strokeWidth;
    }

    @Override
    public void draw (Canvas canvas) {
        Rect bounds = getBounds();
        canvas.drawRect(0, 0, bounds.right, mStrokeWidth, mPaint);
        canvas.drawRect(0, bounds.bottom - mStrokeWidth, bounds.right, bounds.bottom, mPaint);
    }

    @Override
    public void setAlpha (int alpha) {
        mPaint.setAlpha(alpha);
        invalidateSelf();
    }

    @Override
    public void setColorFilter (ColorFilter cf) {
        mPaint.setColorFilter(cf);
        invalidateSelf();
    }

    @Override
    public int getOpacity () {
        return PixelFormat.TRANSLUCENT;
    }
}

これで、必要な場所に設定できます。

view.setBackgroundDrawable(new HorizontalStrokeDrawable(myColor, myStrokeWidth));
于 2013-07-18T04:42:57.323 に答える