我正在开发一个应用程序,我可以将用户从设备图片库中选择的图像动态添加到 imageview 到布局中。添加一张图像后,一切都很完美。当我尝试添加另一张图像时,第一张图像从布局中丢失。我不知道为什么会发生这种情况,请给我解决方案。
当图库打开时,调用 onStop 方法。这是否意味着该 Activity 已重新创建。 ?
这是onActivityResult()
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case SELECT_IMAGE:
if (resultCode == RESULT_OK) {
selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filepath = cursor.getString(columnIndex);
cursor.close();
yourSelectedImage = BitmapFactory.decodeFile(filepath);
if (yourSelectedImage != null) {
final DragImageView dynamicImgView = new DragImageView(
getApplicationContext(), yourSelectedImage);
final RelativeLayout.LayoutParams params = new
RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
dynamicImgView.setLayoutParams(params);
relativeLayout.addView(dynamicImgView);
}
}
break;
default:
break;
}
}
我动态创建 Imageview 的代码。
public class DragImageView extends ImageView{
private float mLastTouchX;
private float mLastTouchY;
private float mDeltaX;
private float mDeltaY;
private Bitmap bmpImg;
public DragImageView(Context context, Bitmap bmpImg) {
super(context);
this.bmpImg = bmpImg;
init();
// TODO Auto-generated constructor stub
}
public DragImageView(final Context context, final AttributeSet attrs){
super(context, attrs);
init();
}
private void init() {
// TODO Auto-generated method stub
setImageBitmap(bmpImg);
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int action = event.getAction();
mLastTouchX = event.getRawX();
mLastTouchY = event.getRawY();
switch (action) {
case MotionEvent.ACTION_DOWN: {
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) getLayoutParams();
mDeltaX = mLastTouchX - lParams.leftMargin;
mDeltaY = mLastTouchY - lParams.topMargin;
break;
}
case MotionEvent.ACTION_MOVE: {
mLastTouchX = event.getRawX();
mLastTouchY = event.getRawY();
final RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams();
params.leftMargin = (int) (mLastTouchX - mDeltaX);
params.topMargin = (int) (mLastTouchY - mDeltaY);
setLayoutParams(params);
break;
}
}
invalidate();
return true;
}
});
}
最佳答案
在If
条件下的代码应该有这样的内容
if (yourSelectedImage != null) {
final DragImageView dynamicImgView = new DragImageView(
getApplicationContext(), yourSelectedImage);
final RelativeLayout.LayoutParams params = new
RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
if(relativeLayout.getChildCount()>0){
int lastChild = relativeLayout.getChildCount();
params.addRule(RelativeLayout.BELOW,relativeLayout.getChildAt(lastChild-1).getId());
}
dynamicImgView.setLayoutParams(params);
relativeLayout.addView(dynamicImgView);
}
关于java - onActivityResult()之后动态添加的imageView消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202928/