我创建了一个将框架设置为图像位图的应用程序...但是当过程给出结果时,我不知道为什么结果位图也保存到我的原始位图变量中,这是我的代码:
主要代码:
@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();
}
});
}
}
变量 frame00, frame01, frame02 是我设置为按钮的 ImageView。当用户点击帧图像时,它会从drawable加载一个图像并存储在一个名为“frame”的变量中,并调用一个名为“backtask”的异步任务。
这是“backtask”代码
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()”代码时,我曾经使用这个 backtask 代码来进行加载。这是我的“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 是一个变量,当“temp = setFrame(oribmp);”时,它包含从类temporary.getBitmap() 获取的原始位图。完成后,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 activity 这是FrameActivity第一次启动时的样子,原来的位图就是那个gecko
set frame 1 这是设置第一帧时的样子
set frame 2 这是设置第二帧时的样子,因为 oribmp 的值与第一个 seFrame 的结果相同,在第二个 setFrame 上它们看起来像堆积
对不起,如果我的问题太长,也许任何人都可以给我解决方案:D