6

問題と質問:

現在、ビューページャーがあり、その中には2つのページ/ビューしかなく、水平方向に隣り合っています。

私のビューは、2 色のグラデーションとその上に低い不透明度/アルファ値で画像を描画するカスタム ビューです。

画面をスワイプして最初のビュー/ページから 2 番目のビュー/ページに、またはその逆に移動すると、画像がつぶれてしまうことがわかりました。これが起こらないようにするにはどうすればよいですか?

例:

の画像は、スワイプ前に表示される最初のビューを示しています。の画像は、スワイプの途中の 2 つのビューを示しています

通常表示 スワイプの途中で、ビューが押しつぶされます

コード:

以前に設定したDrawable変数がありますが、overlayImage不透明度を設定する以外には何もしていません。

@Override
protected void onDraw(Canvas canvas) {
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), startColor, endColor, Shader.TileMode.MIRROR));
    canvas.drawPaint(p);

    //Pretty sure the mistake is around these two next lines
    overlayImage.setBounds(canvas.getClipBounds());
    overlayImage.draw(canvas);
}
4

2 に答える 2

2

私は実際にそれがあなたの中にあると思います

overlayImage.setBounds(canvas.getClipBounds());

コード行。左端 (右端をスワイプ) のビューのクリップ境界を取得する場合、表示可能領域のサイズ (つまり、より小さい縮小領域) を取得しているため、画像はその縮小領域に描画されます。

おそらく、クリップされた境界ではなく、オーバーレイされているビューの全体的なサイズによって境界を設定したいと思うでしょう。代わりにキャンバスの getHeight() と getWidth() を使用して、独自の境界を構築します。

私は実際に、セットアップコードでoverlayImage境界を1回だけセットアップする必要があると思います。描画コードは必ずしもそれを設定する必要はありません。ビューが画面から消え始めると、overlayImage の描画は描画キャンバスの残りの部分と一緒に自然に移動します。

于 2013-02-26T21:24:48.783 に答える
0

xmlフォルダ内にを作成する必要があると思いdrawable-hdpiます。これにはあなたのshader/linear gradiant..が含まれます(オプションについてはこちらをご覧ください)

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

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <gradient
        android:startColor="#474946"
        android:endColor="#181818"
        android:angle="270"/>
</shape>

そして、あなたはxml背景として設定することができます..これは私が思う問題を修正するはずです。

(それが機能しない場合は、なしで試してみてくださいandroid:shape="rectangle"、それは役立つかもしれません)

于 2013-02-26T21:09:24.740 に答える