2012-03-22 3 views
0

Я следующий код для реализации масштабирования изображения в Android:андроид масштабирование изображения с помощью матрицы

public class MyActivity extends Activity{ 
Matrix matrix = new Matrix(); 
    Matrix savedMatrix = new Matrix(); 
    float scaleWidth, scaleHeight,screenWidth,screenHeight; 
    ImageView imageView; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Display display = ((WindowManager) getApplicationContext() 
       .getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     screenWidth=display.getWidth(); 
     screenHeight=display.getHeight(); 
     imageView = (ImageView) findViewById(R.id.imageview); 
     imageView.setScaleType(ScaleType.MATRIX); 
     Bitmap cur_bm = BitmapFactory.decodeResource(getResources(), 
       R.drawable.myimage); 
     float imageWidth = (float) cur_bm.getWidth(); 
     float imageHeight = (float) cur_bm.getHeight(); 
     float newHeight = screenHeight; 
     float newWidth = screenWidth; 
     scaleWidth = screenWidth/imageWidth; 
     scaleHeight = newHeight/imageHeight; 
     imageView.setImageBitmap(cur_bm); 
     SetImageMatrix(); 
    } 

    void SetImageMatrix() { 
     Matrix mtrx = new Matrix(); 
     scaleWidth+=0.6; 
     scaleHeight+=0.6; 
     mtrx.postScale(scaleWidth, scaleHeight,screenWidth/2, screenHeight/2); 
     imageView.setImageMatrix(mtrx); 
     imageView.invalidate(); 
    } 
} 

Если я комментирую строку imageView.setScaleType(ScaleType.MATRIX); и закомментировать функцию SetImageMatrix(), то изображение выглядит следующим образом в эмулятор: enter image description here

Но если я раскомментировать строку imageView.setScaleType(ScaleType.MATRIX); и сохранить функцию комментировали, то изображение появляется следующим образом в эмуляторе:

enter image description here

Просто установка scaleType в MATRIX приводит к уменьшению масштаба изображения. Может кто-нибудь рассказать, почему это происходит и как преодолеть эту проблему?

ответ

1

Наконец, я нашел ответ на это на одном из постов ...

Matrix m = imageView.getImageMatrix(); 

//Get the image's rect 
RectF drawableRect = new RectF(0, 0, DrawView.imageWidth.floatValue(), 
     DrawView.imageHeight.floatValue()); 
//Get the image view's rect 
RectF viewRect = new RectF(0, 0, imageView.getWidth(), 
     imageView.getHeight()); 
//draw the image in the view 
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER); 
//set scale 
m.postScale(scaleWidth.floatValue(), scaleHeight.floatValue(), x, y); 
imageView.setImageMatrix(m); 
imageView.invalidate(); 
+0

привет Neeraj ... я имею такое же problem.and для этого решения я не в состоянии получить класс DrawView , как я могу его получить? –

+0

DrawView не является классом по умолчанию. Вы должны реализовать класс для реализации функций onDraw, onTouch и т. Д. Шахта - DrawView –

Смежные вопросы