Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 收缩以放大或缩小动态添加到布局中的imageview_Android_Imageview_Android Imageview_Pinchzoom - Fatal编程技术网

Android 收缩以放大或缩小动态添加到布局中的imageview

Android 收缩以放大或缩小动态添加到布局中的imageview,android,imageview,android-imageview,pinchzoom,Android,Imageview,Android Imageview,Pinchzoom,我正在使用一个应用程序,在用户从设备的图库中选择图像后,在图像视图中动态创建,并添加到布局中 使用我编写的代码,我能够移动和旋转ImageView。但是,我还想为ImageView实现收缩放大/缩小 代码中存在的错误是,在将ImageView添加到布局中后,ImageView在最右边收缩,以便我想做的事情,但这应该在关键时刻发生 编辑:调试代码后,我发现我想通过增加宽度和高度来增加ImageView的大小。 当我更改以下行时: 最终RelativeLayout.LayoutParams参数=新的

我正在使用一个应用程序,在用户从设备的图库中选择图像后,在图像视图中动态创建,并添加到布局中

使用我编写的代码,我能够移动和旋转ImageView。但是,我还想为ImageView实现收缩放大/缩小

代码中存在的错误是,在将ImageView添加到布局中后,ImageView在最右边收缩,以便我想做的事情,但这应该在关键时刻发生

编辑:调试代码后,我发现我想通过增加宽度和高度来增加ImageView的大小。 当我更改以下行时: 最终RelativeLayout.LayoutParams参数=新的RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_内容, RelativeLayout.LayoutParams.WRAP_内容); 致:

我得到了我想要的。因此,我可以在压缩时的
类DragImageView
中执行此操作

以下是自定义图像视图的代码。

public class DragImageView extends ImageView {

    private float mLastTouchX;
    private float mLastTouchY;

    private float mDeltaX;
    private float mDeltaY;
    private Bitmap bmpImg;
    Context mContext;

    public DragImageView(Context context, Bitmap bmpImg) {
        super(context);
        this.bmpImg = bmpImg;
        this.mContext = context;
        init();

    }

    public DragImageView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        // TODO Auto-generated method stub

        Bitmap resized = Bitmap.createScaledBitmap(bmpImg, 180, 200, true);
        Bitmap conv_bm = getRoundedShape(resized); //function to get the imageview as     rounded shape
        setImageBitmap(conv_bm);

        setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(final View v, MotionEvent event) {
                PopupMenu popup = new PopupMenu(mContext, v);
                // Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.popup_menu,
                        popup.getMenu());

                popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        int itemId = item.getItemId();
                        if (itemId == R.id.delete_DragImgView) {
                            ViewGroup parentView = (ViewGroup) v.getParent();
                            parentView.removeView(v);
                        } else if (itemId == R.id.rotate_DraagImgView) {
                            final RotateAnimation rotateAnim = new RotateAnimation(
                                    0.0f, 90, RotateAnimation.RELATIVE_TO_SELF,
                                    0.5f, RotateAnimation.RELATIVE_TO_SELF,
                                    0.5f);
                            rotateAnim.setDuration(0);
                            rotateAnim.setFillAfter(true);
                            v.startAnimation(rotateAnim);
                        }
                        return false;
                    }
                });

                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;
                    popup.show();
                    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;
            }
        });
    }
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);
图像视图是从活动中添加的,如下所示。

public class DragImageView extends ImageView {

    private float mLastTouchX;
    private float mLastTouchY;

    private float mDeltaX;
    private float mDeltaY;
    private Bitmap bmpImg;
    Context mContext;

    public DragImageView(Context context, Bitmap bmpImg) {
        super(context);
        this.bmpImg = bmpImg;
        this.mContext = context;
        init();

    }

    public DragImageView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        // TODO Auto-generated method stub

        Bitmap resized = Bitmap.createScaledBitmap(bmpImg, 180, 200, true);
        Bitmap conv_bm = getRoundedShape(resized); //function to get the imageview as     rounded shape
        setImageBitmap(conv_bm);

        setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(final View v, MotionEvent event) {
                PopupMenu popup = new PopupMenu(mContext, v);
                // Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.popup_menu,
                        popup.getMenu());

                popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        int itemId = item.getItemId();
                        if (itemId == R.id.delete_DragImgView) {
                            ViewGroup parentView = (ViewGroup) v.getParent();
                            parentView.removeView(v);
                        } else if (itemId == R.id.rotate_DraagImgView) {
                            final RotateAnimation rotateAnim = new RotateAnimation(
                                    0.0f, 90, RotateAnimation.RELATIVE_TO_SELF,
                                    0.5f, RotateAnimation.RELATIVE_TO_SELF,
                                    0.5f);
                            rotateAnim.setDuration(0);
                            rotateAnim.setFillAfter(true);
                            v.startAnimation(rotateAnim);
                        }
                        return false;
                    }
                });

                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;
                    popup.show();
                    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;
            }
        });
    }
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);
我知道“收缩到缩放”是可能的,但在尝试了大量代码和stackover flow的帮助后,我终于想到了这样做。
请帮帮我。提前谢谢。

解决了我的问题。。我只是增加了imageview的高度和宽度。代码

} else if (itemId == R.id.zoom_in) {
                            if (height > 100) {
                                height = height - ZoomCounter;
                                width = width - ZoomCounter;
                                final RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams();
                                getLayoutParams().height = height;
                                getLayoutParams().width = width;
                                setLayoutParams(params);
                                invalidate();
                            }

                        } else if (itemId == R.id.zoom_out) {
                            if (height < 600) {
                                height = height + ZoomCounter;
                                width = width + ZoomCounter;
                                final RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams();
                                getLayoutParams().height = height;
                                getLayoutParams().width = width;
                                setLayoutParams(params);

                                invalidate();
                            }
                        }
}else if(itemId==R.id.zoom\u in){
如果(高度>100){
高度=高度-缩放计数器;
宽度=宽度-缩放计数器;
最终RelativeLayout.LayoutParams params=(LayoutParams)getLayoutParams();
getLayoutParams().height=高度;
getLayoutParams().width=宽度;
setLayoutParams(参数);
使无效();
}
}else if(itemId==R.id.zoom_out){
如果(高度<600){
高度=高度+缩放计数器;
宽度=宽度+缩放计数器;
最终RelativeLayout.LayoutParams params=(LayoutParams)getLayoutParams();
getLayoutParams().height=高度;
getLayoutParams().width=宽度;
setLayoutParams(参数);
使无效();
}
}
检查此链接:尝试此库