再旋转图像一次

时间:2011-12-27 11:58:03

标签: android

我已经使用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);
    }

}

4 个答案:

答案 0 :(得分:0)

有两个问题

  1. 我发现每次点击都会尝试解码相同的资源。而是在'OnCreate()'中解码文件,该文件只对资源进行一次解码,并且不需要多个占位符来解码数据。我认为这应该删除内存错误。在此之后,只需在单击侦听器中调用代码的旋转部分。

  2. 由于您使用相同的基本图像并尝试旋转相同的角度,您将看到相同的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);

}

}