java - onActivityResult()之后动态添加的imageView消失

标签 java android android-layout android-intent

我正在开发一个应用程序,我可以将用户从设备图片库中选择的图像动态添加到 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/

相关文章:

android - 杀死在android模拟器中运行的进程

android:如何向 tabhost 和选项卡添加样式或背景

android - Android 中可以实现这种布局吗?

Java Swing 性能 OS X 10.6 与 Windows 7

java - 将 PROPAGATION_REQUIRED_NEW 与两个单独的 spring bean 一起使用时的 Oracle 数据库锁定

java - faces-config.xml 中的注释与托管 beans 声明

java - 当切换到 Android 中的另一个 Activity 时应用程序停止

java - 安卓 Java : App Crashes when onClick button pressed

java - Guava 缓存并保留已检查的异常

android:layout_marginRight 属性不适用于 RelativeLayout