1

私は android:bottomOffset を使用して、引き出しを下から 100dip 突き出させています。それはうまくいきますが、コンテンツが表示されません。引き出しに触れたときだけ見えます。常に表示されるようにするにはどうすればよいですか (100dip はコンテンツを表示します)。

onFinishInflate()でコンテンツの可視性が GONEに設定されているため、最初は可視性の問題だと思いましたprepareContent()... closeDrawer()SlidingDrawer をコピーしてこれらの行を削除しましたが、解決しませんでした。それは位置の問題のようです。現在、私は数字で遊んでいますが、コンテンツをあるべき場所に表示する方法をまだ見つけていません...そしてこれ以上の時間はありません...助けてください大変感謝しています。

これは、迅速に理解するための問題の写真です。

ここに画像の説明を入力

最初から、右の部分のように見えるようにしたいです。

このデフォルトの動作も私には間違っているように見えます。誰かがハンドルのみのオフセットを作成し、ハンドルとコンテンツの間にギャップを作り、タッチするとコンテンツをハンドルの真下に置きたいと思う理由がわかりません...

4

2 に答える 2

2

これが実用的な解決策です:

SlidingDrawer クラスの完全なコピーを作成し、メソッドdispatchDrawを次のように置き換えます。

@Override
protected void dispatchDraw(Canvas canvas) {
    final long drawingTime = getDrawingTime();
    final View handle = mHandle;
    final boolean isVertical = mVertical;

    drawChild(canvas, handle, drawingTime);

    //if (mTracking || mAnimating) {
        final Bitmap cache = mContent.getDrawingCache();
        if (cache != null) {
            if (isVertical) {
                canvas.drawBitmap(cache, 0, handle.getBottom(), null);
            } else {
                canvas.drawBitmap(cache, handle.getRight(), 0, null);                    
            }
        } else {
            canvas.save();
            canvas.translate(isVertical ? 0 : handle.getLeft() - mTopOffset,
                    isVertical ? handle.getTop() - mTopOffset : 0);
            drawChild(canvas, mContent, drawingTime);
            canvas.restore();
        }
    //} else if (mExpanded) {
        //drawChild(canvas, mContent, drawingTime);
    //}
}

私がしたのはコメント行でした。ご覧のとおり、スライダーのコンテンツである mContent は、mTracking、mAnimating、または mExpanded のいずれかが true の場合にのみ描画されますが、スライダーが「閉じている」場合はそうではありません。おそらく開発者は、スライダーが「閉じている」ときにコンテンツの一部を表示することを念頭に置いていなかったため、スライダーが閉じているときにコンテンツを描画しても意味がありませんでした。

于 2012-07-19T23:44:46.423 に答える
0

lxxの回答は問題なく機能します。応答にすべてのコードを貼り付けることができなかったので、別の回答を入れました。lxx のコードとの唯一の違いは、SlidingDrawer クラスをすべてコピーしたのではなく、新しいクラスを作成して拡張したことです。以下は完全なコードです。

package com.localini.widget;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.widget.SlidingDrawer;

public class ExtendedSlidingDrawer extends SlidingDrawer {

    private boolean mVertical;
    private int mTopOffset;

    public ExtendedSlidingDrawer(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        int orientation = attrs
                .getAttributeIntValue("android", "orientation", ORIENTATION_VERTICAL);
        mTopOffset = attrs.getAttributeIntValue("android", "topOffset", 0);
        mVertical = (orientation == SlidingDrawer.ORIENTATION_VERTICAL);
    }

    public ExtendedSlidingDrawer(Context context, AttributeSet attrs) {
        super(context, attrs);

        int orientation = attrs
                .getAttributeIntValue("android", "orientation", ORIENTATION_VERTICAL);
        mTopOffset = attrs.getAttributeIntValue("android", "topOffset", 0);
        mVertical = (orientation == SlidingDrawer.ORIENTATION_VERTICAL);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        final long drawingTime = getDrawingTime();
        final View handle = getHandle();
        final boolean isVertical = mVertical;

        drawChild(canvas, handle, drawingTime);

        //if (mTracking || mAnimating) {
        final Bitmap cache = getContent().getDrawingCache();
        if (cache != null) {
            if (isVertical) {
                canvas.drawBitmap(cache, 0, handle.getBottom(), null);
            } else {
                canvas.drawBitmap(cache, handle.getRight(), 0, null);
            }
        } else {
            canvas.save();
            canvas.translate(isVertical ? 0 : handle.getLeft() - mTopOffset,
                        isVertical ? handle.getTop() - mTopOffset : 0);
            drawChild(canvas, getContent(), drawingTime);
            canvas.restore();
        }
        //} else if (mExpanded) {
        //drawChild(canvas, mContent, drawingTime);
        //}
    }
}

android:buttonOffser="-100dip"xml レイアウト ファイルでは、元の質問で説明したように設定する必要があります。

于 2013-03-23T19:37:23.327 に答える