我创建了一个将帧设置为图像位图的应用程序...但是当进程给出结果时,我不知道为什么结果位图也保存到我的原始位图变量,这是我的代码:
主要代码:
@Override
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.frame);
tampilFrame = (ImageView)findViewById(R.id.ivframe);
oribmp = temporary.getBitmap();
temp = oribmp;
tampilFrame.setImageBitmap(temp);
frame00 = (ImageView)findViewById(R.id.frs00);
frame00.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr00));
frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
new backtask().execute();
}
});
frame01 = (ImageView)findViewById(R.id.frs01);
frame01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr01));
frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
new backtask().execute();
}
});
frame02 = (ImageView)findViewById(R.id.frs02);
frame02.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr02));
frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
new backtask().execute();
}
});
frame03 = (ImageView)findViewById(R.id.frs03);
frame03.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr03));
frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
new backtask().execute();
}
});
}
}
variabel frame00,frame01,frame02是我设置为Button的ImageView。当用户单击帧图像时,它将从drawable加载图像并存储在名为“frame”的变量中,并调用名为“backtask”的asyncTask。
这是“反铲任务”代码
public class backtask extends AsyncTask<Void, Void, Void> {
ProgressDialog prog;
@Override
protected void onPreExecute(){
super.onPreExecute();
prog = ProgressDialog.show(FrameActivity.this, "", "Progress...");
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
temp = setFrame(oribmp);
Log.i("temp", "widht : "+String.valueOf(temp.getWidth())+" Height : "+String.valueOf(temp.getHeight()));
return null;
}
@Override
protected void onPostExecute(Void res){
super.onPostExecute(res);
tampilFrame.setImageBitmap(temp);
prog.dismiss();
Log.i("setFrame", "Complete");
}
}
这个后退任务代码我用来在应用程序运行“setFrame()”代码时进行加载。这是我的“setFrame”代码:
public Bitmap setFrame(Bitmap bit){
for (int i=0;i<frame.getWidth();i++){
for(int j=0;j<frame.getHeight();j++){
if (Color.alpha(frame.getPixel(i, j))!=0){
bit.setPixel(i, j, frame.getPixel(i, j));
}
}
}
frame.recycle();
return bit;
}
oribmp是一个包含原始位图的变量,它来自类temporary.getBitmap() 当“temp = setFrame(oribmp);”完成后,ori bmp也和temp一样变化。 当我临时检查类时,临时类中包含原始位图的位图变量也会更改为setFrame的结果...
这是代码pf临时类
public class temporary {
private static Bitmap Mbmp;
public static Bitmap getBitmap () {
return Mbmp;
}
public static void setBitmap(Bitmap oribimp) {
// TODO Auto-generated method stub
Mbmp = oribimp;
Log.i("editor", "simpen bitmap");
}
}
临时类是我用来将位图值发送到我的应用程序中的另一个活动的类。这就是FrameActivity在运行时的样子..
strart活动 这是第一次启动时FrameActivity的外观,原始位图是gecko
设置第1帧 这是设置第一帧时的外观
设置第2帧 这是设置第二帧时的外观,导致oribmp具有与第一个seFrame的结果相同的值,在第二个setFrame上它们看起来像堆积
如果我的问题太长了,也许任何人都可以给我解决方案:D