2013-04-18 36 views
0

我想在圍繞中心支點Android應用圖像旋轉及以下爲代碼..在Android的畫布,爲什麼矩陣是過於緩慢和低迷

package com.android.maddy.canvs; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 

import android.os.Handler; 
import android.provider.OpenableColumns; 
import android.view.MotionEvent; 
import android.view.View; 

public class drawview extends View { 
    private Drawable d[]=new Drawable[2]; 

    Boolean done=false; 
    Handler h; 
    float th=0; 
    public drawview(Context context) { 
     super(context); 
     d[0]=context.getResources().getDrawable(R.drawable.appdatabk); 
     d[1]=context.getResources().getDrawable(R.drawable.appdata); 
     h = new Handler(); 
    } 

    Runnable r =new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 

      th++; 
      invalidate(); 
     } 
    }; 

    public void onDraw(Canvas c){ 
     super.onDraw(c); 
     Paint p =new Paint(); 
     Rect imageBounds = c.getClipBounds(); // for the background 
     d[0].setBounds(imageBounds); 

     d[0].draw(c); 

     Matrix m = new Matrix(); 
     m.setTranslate(getWidth()/2, getHeight()/2);   
     m.preRotate(th,43,160); //my image is 86x320 

     Bitmap b =  BitmapFactory.decodeResource(getResources(),R.drawable.appdata);//image of the bottle i want to rotate 
     c.drawBitmap(b,m, p); 
     p.setColor(Color.BLUE); 
     h.postDelayed(r,1); 


    } 



    } 

這裏會發生什麼事是,矩陣運算速度變慢旋轉的速度,從而它給醜陋的輸出緩慢.. 如果你有另一種方法來旋轉中心樞軸的圖像,而不使用矩陣或有其他方法,然後 請幫我。 我也刪除矩陣和使用x + r *(Math.cos(th))和y + r *(Math.sin(th))檢查drawBitmap()函數中的旋轉,該函數工作正常,但圖像不會繞着樞軸旋轉。 請幫忙.. 謝謝

回答

0

矩陣相當快。減慢速度的是你在onDraw中創建類並加載位圖。在類中創建Paint和Matrix,並且一次加載位圖

0

我有同樣的問題。我認爲會發生什麼情況是畫布會將矩陣值存儲到數組中,並且填充旋轉畫布的次數越多。

當您使用Matrix.postRotate(degrees, px, py)Canvas.concat(Matrix)

時會發生同樣的情況