2011-09-01 1 views
1

Мое приложение имеет 9 растровых изображений на нем в сетке 3x3. Все они отображаются на экране и в зависимости от того, как пользователь взаимодействует с ними (коснитесь, дважды коснитесь, щепотку, масштабирование, перетаскивание), изображение, которое «работает», должно выполнять разные задачи.Android Scale растровое изображение

Так, например, если я нажимаю на одно изображение, он должен полностью вращаться вокруг вертикального доступа, а затем останавливаться.

В настоящее время я использую SurfaceView с методом onTouchEvent (..). Как я понял, я мог бы оживить это, уменьшив ширину изображения с 1 на -1 до 1. Я пытаюсь использовать матрицу, но я не могу заставить изображение оставаться в центре его места. Пожалуйста, помогите мне исправить это или предложить альтернативный/лучший способ выполнить это.

Мой текущий код - это всего лишь тест. Если 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

Попробуйте это вместо postTranslate

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

где CenterX, Y является центром точечного рисунка

ОБНОВЛЕНИЕ

вы можете играть с graphics.camera на андроиде, который преобразует матрицу. Подключите камеру к основному виду (сетке) и переопределите getChildStaticTransformation. Получите матрицу преобразования. t.getMatrix() и измените его. Вы можете перемещать его в любом месте , так как это матрица с основного вида, но адресована только для рендеринга этого конкретного ребенка.

так что-то вроде этого

@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 (шкала, 1f); \t m.postTranslate (mX, mY); ' Но это не сработало. Я также пробовал шкалу заказов, предтранслят, посттранслят. Nothing – Sababado

+0

Сохраняет изображение, выровненное по левому краю. Мне нужно, чтобы это было сосредоточено. – Sababado

+0

сообщение обновлено посмотреть – weakwire