2011-12-27 76 views
0

我已經使用eclipse爲android應用程序編寫了一些代碼。以下是我的Activity.java類。當我執行我的代碼時,圖像只旋轉一次,如果再次單擊該按鈕,則圖像沒有被旋轉,同時它向我顯示6291456字節的外部分配對於這個過程來說太大了。「」錯誤。旋轉圖像多於一次

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 

public class ImageActivity extends Activity implements OnClickListener { 

    /** Called when the activity is first created. */ 
    ImageView img; 
    Bitmap bmp; 
    Bitmap rotatedBMP; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(this); 
    } 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     img = (ImageView) findViewById(R.id.imageView01); 
     bmp = BitmapFactory.decodeResource(getResources(),R.drawable.bharath); 


     int w = bmp.getWidth(); 
     int h = bmp.getHeight(); 

     Matrix mtx = new Matrix(); 
     mtx.preRotate(90); 

     rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
     img.setImageBitmap(rotatedBMP); 
    } 

} 
+1

你正在旋轉的默認圖像一次又一次不是被打斷的,也沒有釋放內存這就是爲什麼面對6291456字節的外部 – ingsaurabh 2011-12-27 12:00:53

回答

0

有2個問題

  1. 我看到你想每次有點擊時間解碼相同的資源。取而代之的是在'OnCreate()'中解碼文件,該文件將只解碼資源一次,並且不需要多個佔位符來解碼解碼數據。我認爲這應該消除內存錯誤。之後,在您的點擊監聽器中調用代碼的旋轉部分。

  2. 而且由於您使用相同的基本圖像並試圖旋轉相同的角度,您將看到相同的90度旋轉圖像。

+0

你能給我清楚的看法關於第一點 – 2011-12-27 12:14:06

+0

我的意思是移動代碼行,img =(ImageView )findViewById(R.id.imageView01); bmp = BitmapFactory.decodeResource(getResources(),R.drawable.bharath);到OnCreate,使用'bmp'來獲得旋轉的圖像。現在您不需要多個內存緩衝區來保存重複的解碼數據。 – Deepak 2011-12-27 12:16:38

0

,當你旋轉你的「巴拉斯」的形象,並創建一個新的位圖你onclick功能是拉動相同的資源即,它實際上並沒有影響到原始圖像。這就是爲什麼每當你點擊你的按鈕,它會選擇原始的Bharath。

我認爲你可以跟蹤旋轉,即第一次點擊旋轉90°,然後點擊180°左右,等等。

+0

可以請你告訴我如何在第一次點擊後將原始圖像更改爲旋轉圖像 – 2011-12-27 12:13:05

+0

如果你想以某個間隔旋轉此圖像,那麼最好使用動畫而不是創建位圖。 – user1117564 2011-12-27 14:12:49

+0

您可以使用此動畫以特定間隔旋轉此圖像... user1117564 2011-12-27 14:16:48

0

你旋轉原始圖像從默認這就是90每次Ÿ它沒有得到旋轉每次....

試試這個

public class ImageActivity extends Activity implements OnClickListener { 

/** Called when the activity is first created. */ 
ImageView img; 
Bitmap bmp; 
Bitmap rotatedBMP; 
Matrix mtx = new Matrix(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(this); 

    bmp = BitmapFactory.decodeResource(getResources(),R.drawable.bharath); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    img = (ImageView) findViewById(R.id.imageView01); 

    int w = bmp.getWidth(); 
    int h = bmp.getHeight(); 

    mtx.preRotate(90); 

    rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
    img.setImageBitmap(rotatedBMP); 
} 

}

+0

Dude我很抱歉地說但是..這並沒有幫助我..圖像不旋轉我已經改變了你提到的單行.. – 2011-12-27 12:55:08

0

試試這個:

public class Image_rotationActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
ImageView img; 
Button btn; 
Bitmap bmp; 
int angle = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    img = (ImageView) findViewById(R.id.imageView1); 
    btn = (Button) findViewById(R.id.button1); 
    btn.setOnClickListener(this); 
    bmp = BitmapFactory 
      .decodeResource(getResources(), R.drawable.hourglass); 

} 

@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

    Matrix mtx = new Matrix(); 
    angle = angle + 20; 
    mtx.preRotate(angle); 

    // Rotating Bitmap 
    Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), 
      bmp.getHeight(), mtx, true); 

    BitmapDrawable bmd = new BitmapDrawable(rotatedBMP); 

    img.setImageDrawable(bmd); 

} 

}

+0

這是阿爾斯無法正常工作..請嘗試再次發佈它。 – 2011-12-27 14:03:44