フレームを画像ビットマップに設定するアプリケーションを作成します...しかし、プロセスが結果を与えるとき、なぜ結果のビットマップも元のビットマップ変数に保存されるのかわかりません。これは私のコードです:
メインコード:
@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」という名前の 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 は、「temp = setFrame(oribmp);」のときにクラス temporary.getBitmap() から取得した元のビットマップを含む変数です。終了すると、ori bmp も temp と同じように変化します。クラス一時にチェックすると、一時クラスの元のビットマップを含むビットマップバリアベルもsetFrameの結果に変更されます...
これは一時クラスのコードです
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 がどのように見えるかです..
最初の開始時のFrameActivity
の外観です。元のビットマップはその gecko です。
フレーム 1 を設定
します。これは、最初のフレームを設定したときの外観です。
フレーム 2 を設定
します。これは 2 番目のフレームを設定したときの外観です。oribmp は最初の seFrame の結果と同じ値を持つため、2 番目の setFrame では積み重なっているように見えます。
私の質問が長すぎる場合は申し訳ありませんが、誰かが私に解決策を教えてくれるかもしれません:D