2016-07-08 3 views
0

2つの環状ビットマップを中心にアクティブにする必要があります。そのビットマップの一部がオフスクリーンで表示されないように、後で、ユーザーがアクティビティを離れると、同じ方法でアニメーション化されますが、逆方向に移動する必要があります(横から中央に移動)。Android:移動したときにオフスクリーンビットマップが表示される

これらのビットマップを主な場所(側面)に描画するクラスを実装しましたが、私が今ある問題は、それらをアニメーション化するときに、ビットマップのオフスクリーン部分が表示されず、私の画面では、醜い動くビットマップが欠けているのが分かります。

これは、ビットマップが描画される方法です。

public class MyImageView extends ImageView { 

    private Canvas offscreen; 

    private static Bitmap pattern; 
    private static Bitmap logo; 

    private static int screenWidth, screenHeight; //The real size of the screen 
    private static int patternDiameter, logoDiameter; //bitmaps' dimensions, both images are circles 

    private static float topPatternMargin, leftPatternMargin; 
    private static float topLogoMargin, leftLogoMargin; 

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

     screenWidth = getSize(context)[0]; 
     screenHeight = getSize(context)[1]; 

     patternDiameter = (int)(screenWidth * (1005.0/1280.0)); 
     logoDiameter = (int)(patternDiameter * (230.0/502.5)); 

     pattern = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_pattern); 
     pattern = Bitmap.createScaledBitmap(pattern, patternDiameter, patternDiameter, false); 
     logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_logo); 
     logo = Bitmap.createScaledBitmap(logo, logoDiameter, logoDiameter, false); 

     leftPatternMargin = (float) ((screenWidth) * (430.0/1280.0) - (patternDiameter/2.0)); 
     topPatternMargin = (float) ((screenHeight - patternDiameter)/2.0); 
     leftLogoMargin = (float) (leftPatternMargin + patternDiameter/2.0 - logoDiameter/2.0); 
     topLogoMargin = (float)(topPatternMargin + patternDiameter/2.0 - logoDiameter/2.0); 

     offscreen = new Canvas(pattern); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     if(canvas==offscreen) 
      super.onDraw(offscreen); 

     else { 

      super.draw(offscreen); 

      canvas.drawBitmap(pattern, leftPatternMargin, topPatternMargin, null); 
      canvas.drawBitmap(logo, leftLogoMargin, topLogoMargin, null); 

     } 

    } 
} 

だから私の質問は、私は、このコード(または多分いくつかの他のコード)を変更する方法をである私は、このクラスのインスタンスを作成する際に動き回るように、ということ、そのすべての部分がユーザーに表示されますか?

答えて

0

私はここで答えを見つけた:

When drawing outside the view clip bounds with Android: how do I prevent underling views from drawing on top of my custom view?

をソリューションは、レイアウトに次の行を追加することです:

android:clipChildren="false" 
+0

ええ、私はその答えの作者です。アニメーションのためにこれをしている場合はレイアウトに設定しないでください。アニメーションを開始する前に設定し、アニメーションが終了したら削除します。 –

+0

PS:これに代わる方法は、ViewOverlayを使用してアニメーションのオーバーレイでビューを一時的に移動し、終了したらコンテナに戻すことです。これは、特に、親コンテナを変更するビューをアニメートする場合に意味があります。親ビューの一番上にあるViewOverlayを使用すると、アニメーションをクリップなしで表示できます。 –

関連する問題