ImageView 背景在方向更改后不显示图像
编辑:如果有人在调用 onConfigurationChanged 时想要答案,我只需初始化我在 onCreate 中所做的所有变量
你好,我有一个应用程序,它显示一个进度对话框,然后在已拍摄的图像视图中显示图像从相机。问题是,当我以横向模式拍摄照片,然后等待对话框完成时,任何图像视图中都不会显示任何内容,并且所有按钮都不起作用。当对话框即将显示时,它曾经崩溃,但我修复了这个问题。这是我的一些代码:
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();
}
}
}
现在我真的不知道该怎么办。我认为这个问题可能与方向改变有关。任何帮助表示赞赏!
Edit: If anbody wants an answer when onConfigurationChanged is called I just intialize all the variables I did in onCreate
Hello I have an application the displays a progress dialog and then displays an image in an imageview that has been taken from the camera. The problem is when I take the picture in landscape, and then wait for the dialog to finish nothing shows up in any of the imageview, and none of the buttons work. It used to crash when the dialog was about to be displayed, but I fixed that. Here is some of my code:
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();
}
}
}
Now I really don't know what to do. I think the problem might have something to do with the orientation change. Any help is appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用
AsyncTask
而不是您的自定义线程。由于有些事情应该在 UI 线程上工作并在后台线程上运行,AsyncTask 使这变得很容易。另外,仅通过查看线程代码来调试它既困难又不可靠。http://developer.android.com/guide/topics/fundamentals /processes-and-threads.html
http://developer.android.com/reference/android/os/AsyncTask.html
Try using
AsyncTask
instead of your custom thread. As some of the things are suppose to work on UI thread and rest on background thread and AsyncTask make that easy. Also debugging thread code just by looking at it is difficult as well as un-reliable.http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
http://developer.android.com/reference/android/os/AsyncTask.html