2011-09-01 62 views
1

私のアプリケーションには、3x3グリッド上に9つのビットマップイメージがあります。すべてが画面に表示されており、ユーザーがどのように対話しているか(タップ、ダブルタップ、ピンチ、ズーム、ドラッグ)に応じて、「アクションオン」になっている画像はさまざまなタスクを実行する必要があります。Androidビットマップイメージの拡大/縮小

たとえば、1つの画像をタップすると、その画像を垂直方向にまっすぐ回転させて停止する必要があります。

現在、私はonTouchEvent(..)メソッドでSurfaceViewを使用しています。私がアニメーション化できると思ったのは、画像の幅を1から-1に戻してスケーリングすることです。私は行列を使用しようとしていましたが、イメージをその中心に置くことができません。これを修正したり、これを代替/より良い方法で提案してください。

私の現在のコードは単なるテストに過ぎません。 bがtrueの場合、メソッドはビットマップの縮尺を試みます。 Bは、それが

public void doDraw(Canvas canvas, boolean b) 
{ 
    Matrix m = new Matrix(); 

    float scale = .5f; 
    m.setScale(scale, 1f); 
    m.postTranslate(mX,mY); 

    if(!b) 
     canvas.drawBitmap(mBitmap, mX, mY, null); 
    else 
     canvas.drawBitmap(mBitmap, m, null); 
} 

答えて

1

はcenterX、Yは、ビットマップ

の中心であるこの代わりのpostTranslate

matrix.preTranslate(-centerX, -centerY); 
matrix.postTranslate(centerX, centerY); 

をお試しください:通常のビットマップを描画しますfalseの場合更新

あなたはマトリックスを変換するアンドロイドのgraphics.cameraで遊ぶことができます。カメラをメインビュー(グリッド)にアクセスし、getChildStaticTransformationをオーバーライドします。変換行列を取得します。 t.getMatrix()とその1つを変更します。 がメインビューの行列ですが、その特定の子をレンダリングするためにのみ扱われるため、任意の場所に移動することができます。

はそのため

@Override 
    protected boolean getChildStaticTransformation(View child, Transformation t) { 
     Matrix matrix = t.getMatrix(); 
      int centerX = (child.getWidth()/2); 
      int centerY = (child.getHeight()/2); 
     t.clear(); 
     t.setTransformationType(Transformation.TYPE_MATRIX); 
     mCamera.save(); 

     if (child == getChildAt(0)) { 
      mCamera.translate(pixels to the right,pixels to the bottom, 
        to the z axis); 
      mCamera.getMatrix(matrix); 
      mCamera.restore(); 
      matrix.preTranslate(-centerX, -centerY); 
      matrix.postTranslate(centerX, centerY); 

     } 

     return true; 
    } 

のようなものもsetStaticTransformationsEnabled(true)を設定することを忘れていけないでください。グリッドのコンストラクタのどこか

+0

私はあなたが次のようになっていると仮定しています: 'float scale = -1f; \t m.preTranslate(-mX、-mY); \t m.setScale(scale、1f); \t m.postTranslate(mX、mY); ' しかし、これはうまくいかなかった。私はまた、注文のスケールを試して、pretranslate、posttranslate。 Nothing – Sababado

+0

イメージは左端に沿って並んでいます。私はそれを中心にする必要があります。 – Sababado

+0

投稿更新 – weakwire

関連する問題