2011-12-27 78 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