我已经使用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);
}
}
答案 0 :(得分:0)
有两个问题
我发现每次点击都会尝试解码相同的资源。而是在'OnCreate()'中解码文件,该文件只对资源进行一次解码,并且不需要多个占位符来解码数据。我认为这应该删除内存错误。在此之后,只需在单击侦听器中调用代码的旋转部分。
由于您使用相同的基本图像并尝试旋转相同的角度,您将看到相同的90度旋转图像。
答案 1 :(得分:0)
您的onclick
函数正在拉动相同的资源,即当您旋转“bharath”图像并使用它创建新的位图时,它实际上不会影响原始图像。这就是为什么每当你点击你的按钮它就会选择原来的Bharath。
我认为你可以跟踪旋转,即首先点击旋转90,然后在下一次点击时旋转180°左右。
答案 2 :(得分: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);
}
}
答案 3 :(得分: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);
}
}