2013-02-23 3 views
6

問題&質問ぺしゃんこになっ:Drawableのは

を私は現在、その中にわずか2ページ/ビューで、ビューのポケベルを持って水平に隣接しているいます。

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

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

例:

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

Normal viewSquashed views, as I'm mid-way through swiping

コード:

私は不透明度を設定する以外に何もしていないことを、私は以前の設定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); 
} 
+0

あなたのoverlayImageはどのようなDrawableですか?このonDrawはカスタムビューの一部ですか? – Matthieu

+0

"overlayImage"は文字通り通常の単純なDrawableです。はい、このonDrawは私のカスタムビューの一部です。 –

答えて

2

私は実際にそれがコードのあなたの

overlayImage.setBounds(canvas.getClipBounds()); 

ラインであると考える(それが役立つかもしれないこと、android:shape="rectangle"なしにしようと動作しない場合)。最も左の(最も右にスワイプする)ビューのクリップ境界を取得すると、可視領域のサイズ(すなわち、より小さな縮小領域)が得られ、その縮小領域に画像が描画されます。

オーバーレイされているビューの全体のサイズで境界を設定したいと思うかもしれません。キャンバスのgetHeight()とgetWidth()を代わりに使用し、独自の境界を構築します。

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

0

私はあなたがdrawable-hdpiフォルダにxmlを作成する必要があると思います。あなたshader/linear gradiantが含まれています ...(オプションはhereを見るために)

<?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 ..を設定することができます。

関連する問題