Java ImageView背景在方向更改后不显示图像
编辑:如果一个主体在调用OnConfiguration Changed时需要一个答案,我只需初始化我在onCreate中所做的所有变量 您好,我有一个应用程序,它显示一个进度对话框,然后在从相机拍摄的imageview中显示一幅图像。问题是当我在横向中拍摄照片,然后等待对话框完成时,任何imageview中都没有显示任何内容,并且所有按钮都不起作用。它曾经在对话框即将显示时崩溃,但我修复了这个问题。以下是我的一些代码:Java ImageView背景在方向更改后不显示图像,java,android,imageview,screen-orientation,Java,Android,Imageview,Screen Orientation,编辑:如果一个主体在调用OnConfiguration Changed时需要一个答案,我只需初始化我在onCreate中所做的所有变量 您好,我有一个应用程序,它显示一个进度对话框,然后在从相机拍摄的imageview中显示一幅图像。问题是当我在横向中拍摄照片,然后等待对话框完成时,任何imageview中都没有显示任何内容,并且所有按钮都不起作用。它曾经在对话框即将显示时崩溃,但我修复了这个问题。以下是我的一些代码: public class AnnoyingMeterActivity ext
public class AnnoyingMeterActivity extends Activity {
Random r = new Random(System.currentTimeMillis());
class ProgressThread extends Thread {
Handler mHandler;
final static int STATE_DONE = 0;
final static int STATE_RUNNING = 1;
int mState;
int total;
ProgressThread(Handler h) {
mHandler = h;
}
public void run() {
mState = STATE_RUNNING;
total = 0;
while (mState == STATE_RUNNING) {
try {
Thread.sleep(55);
} catch (InterruptedException e) {
}
Message msg = mHandler.obtainMessage();
msg.arg1 = total;
mHandler.sendMessage(msg);
total++;
}
}
/*
* sets the current state for the thread, used to stop the thread
*/
public void setState(int state) {
mState = state;
}
}
TextView tv;
ImageView iv;
TextView tv1;
static final int PROGRESS_DIALOG = 0;
ProgressThread progressThread;
ProgressDialog progressDialog;
Bitmap person;
ImageView tiv;
ImageView iv2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button scanPersonButton = (Button) findViewById(R.id.scanPerson);
scanPersonButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
scanPerson();
}
});
tv = (TextView) findViewById(R.id.tv);
iv = (ImageView) findViewById(R.id.annoyingMeterImage);
iv.setBackgroundResource(R.drawable.finalmeter);
tv1 = (TextView) findViewById(R.id.textView1);
tiv = (ImageView) findViewById(R.id.imageView1);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}
protected void scanPerson() {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
person = (Bitmap) data.getExtras().get("data");
showDialog(PROGRESS_DIALOG);
}
}
protected void randomImageDisplayThing() {
tiv.setBackgroundDrawable(new BitmapDrawable(person));
switch (annoyingRating) {
case 0:
iv.setBackgroundResource(R.drawable.finalmeter0);
break;
case 1:
iv.setBackgroundResource(R.drawable.finalmeter1);
break;
case 2:
iv.setBackgroundResource(R.drawable.finalmeter2);
break;
case 3:
iv.setBackgroundResource(R.drawable.finalmeter3);
break;
case 4:
iv.setBackgroundResource(R.drawable.finalmeter4);
break;
case 5:
iv.setBackgroundResource(R.drawable.finalmeter5);
break;
case 6:
iv.setBackgroundResource(R.drawable.finalmeter6);
break;
case 7:
iv.setBackgroundResource(R.drawable.finalmeter7);
break;
case 8:
iv.setBackgroundResource(R.drawable.finalmeter8);
break;
case 9:
iv.setBackgroundResource(R.drawable.finalmeter9);
break;
case 10:
iv.setBackgroundResource(R.drawable.finalmeter10);
break;
case 11:
iv.setBackgroundResource(R.drawable.finalmeter11);
break;
}
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case PROGRESS_DIALOG:
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Scanning...");
return progressDialog;
default:
return null;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.arg1;
progressDialog.setProgress(total);
if (total >= 100) {
dismissDialog(PROGRESS_DIALOG);
progressThread.setState(ProgressThread.STATE_DONE);
randomImageDisplayThing();
}
}
};
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case PROGRESS_DIALOG:
progressDialog.setProgress(0);
progressThread = new ProgressThread(handler);
progressThread.start();
}
}
}
现在我真的不知道该怎么办。我认为问题可能与方向的改变有关。感谢您的帮助 尝试使用
AsyncTask
而不是自定义线程。由于一些事情假定在UI线程上工作,其余部分在后台线程和AsyncTask上工作,所以这很容易。另外,仅仅通过查看线程代码来调试线程代码既困难又不可靠
http://developer.android.com/reference/android/os/AsyncTask.html