繁体   English   中英

在onActivityResult()之后,动态添加的imageView消失了

[英]After onActivityResult() the imageView added dynamically disappears

我正在开发一个应用程序,可以将用户从设备图片库中选择的图像动态添加到布局中的imageview。 添加一幅图像后,一切正常。 当我尝试添加其他图像时,第一个图像从布局中丢失。 我不知道为什么会发生,请给我解决方案。 打开图库时,将调用onStop方法。 这是否意味着活动已重新创建。 这是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;
            }
        });
    }

我有解决方案..我已经检查了它,并且运行正常:)

像这样呼叫相机:

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, SELECT_IMAGE); 

和ActivityResult将如下所示:

 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) {

                   Bundle extras = data.getExtras();
                   yourSelectedImage = (Bitmap) extras.get("data");

                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;
        }
    }

您的代码在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);
            }
// Try this way,hope this will help you to solve your problem.

// define this variable for dynamic ImageView id in activity.
    int imageViewId=1;

    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);
                        dynamicImgView.setId(imageViewId++);
                        final RelativeLayout.LayoutParams params = new
                                RelativeLayout.LayoutParams(
                                RelativeLayout.LayoutParams.WRAP_CONTENT,
                                RelativeLayout.LayoutParams.WRAP_CONTENT);
                        if(imageViewId>1){
                            params.addRule(RelativeLayout.BELOW,imageViewId-1);
                        }
                        dynamicImgView.setLayoutParams(params);
                        relativeLayout.addView(dynamicImgView);
                    }
                }
                break;

            default:
                break;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM