栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Android中选择和取消选择图像?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Android中选择和取消选择图像?

最后,我找到了正确的答案。我认为这可能会有所帮助。所以我分享。首先,我在DragView类中引入了这样的Rigion对象:

public Region region;

然后,我向构造函数添加了一行,如下所示:

region = new Region(mView.getLeft(), mView.getTop(), mView.getRight(), mView.getBottom());

然后,我在DragView.java文件中添加了一个方法:

    public boolean onTouchEvent (MotionEvent event){        final int action = event.getAction();        final int x = (int) event.getX();        final int y = (int) event.getY();        switch (action & MotionEventCompat.ACTION_MASK) { case MotionEvent.ACTION_DOWN:     if (!region.contains(x, y)) {         mShadowView.setVisibility(INVISIBLE);         mCloseView.setVisibility(GONE);         mPushView.setVisibility(GONE);     }     break;        }        return true;    }

因此,DragView.java填充将如下所示:

package com.seifi.dragtestapplication;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Region;import android.graphics.drawable.Drawable;import android.support.v4.view.MotionEventCompat;import android.util.AttributeSet;import android.util.TypedValue;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.frameLayout;import android.widget.ImageView;import android.widget.LinearLayout;public class DragView extends LinearLayout {    private ImageView mView;    private ImageView mPushView;    private ImageView mCloseView;    private View mShadowView;    private float _1dp;    private boolean mCenterInParent = true;    private Drawable mImageDrawable, mPushImageDrawable, mCloseImageDrawable, mShadowImageDrawable;    private float mImageHeight, mImageWidth, mPushImageHeight, mPushImageWidth, mCloseImageHeight, mCloseImageWidth, mShadowImageWidth, mShadowImageHeight;    private int mLeft = 0, mTop = 0;    public Region region;    public DragView(Context context) {        this(context, null, 0);    }    public DragView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public DragView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        this._1dp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, context.getResources().getDisplayMetrics());        this.parseAttr(context, attrs);        View mRoot = View.inflate(context, R.layout.drag_layout, null);        addView(mRoot, -1, -1);        mPushView = (ImageView) mRoot.findViewById(R.id.push_view);        mView = (ImageView) mRoot.findViewById(R.id.view);        mCloseView = (ImageView) mRoot.findViewById(R.id.close_view);        mShadowView = (View)mRoot.findViewById(R.id.shadowView);        mView.setonTouchListener(new ViewonTouchListener(mPushView, mCloseView, mShadowView));        region = new Region(mView.getLeft(), mView.getTop(), mView.getRight(), mView.getBottom());    }    private void parseAttr(Context context, AttributeSet attrs) {        if (null == attrs) return;        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SingleFingerView);        if (a != null) { int n = a.getIndexCount(); for (int i = 0; i < n; i++) {     int attr = a.getIndex(i);     if (attr == R.styleable.SingleFingerView_centerInParent) {         this.mCenterInParent = a.getBoolean(attr, true);     } else if (attr == R.styleable.SingleFingerView_image) {         this.mImageDrawable = a.getDrawable(attr);     } else if (attr == R.styleable.SingleFingerView_image_height) {         this.mImageHeight = a.getDimension(attr, 200 * _1dp);     } else if (attr == R.styleable.SingleFingerView_image_width) {         this.mImageWidth = a.getDimension(attr, 200 * _1dp);     } else if (attr == R.styleable.SingleFingerView_push_image) {         this.mPushImageDrawable = a.getDrawable(attr);     } else if (attr == R.styleable.SingleFingerView_push_image_width) {         this.mPushImageWidth = a.getDimension(attr, 30 * _1dp);     } else if (attr == R.styleable.SingleFingerView_push_image_height) {         this.mPushImageHeight = a.getDimension(attr, 30 * _1dp);     } else if (attr == R.styleable.SingleFingerView_left) {         this.mLeft = (int) a.getDimension(attr, 0 * _1dp);     } else if (attr == R.styleable.SingleFingerView_top) {         this.mTop = (int) a.getDimension(attr, 0 * _1dp);     } else if (attr == R.styleable.SingleFingerView_close_image) {         this.mCloseImageDrawable = a.getDrawable(attr);     } else if (attr == R.styleable.SingleFingerView_close_image_width) {         this.mCloseImageWidth = a.getDimension(attr, 30 * _1dp);     } else if (attr == R.styleable.SingleFingerView_close_image_height) {         this.mCloseImageHeight = a.getDimension(attr, 30 * _1dp);     } else if (attr == R.styleable.SingleFingerView_shadow_image) {         this.mShadowImageDrawable = a.getDrawable(attr);     } else if (attr == R.styleable.SingleFingerView_shadow_image_width) {         this.mShadowImageWidth = a.getDimension(attr, 200 * _1dp);     } else if (attr == R.styleable.SingleFingerView_shadow_image_height) {         this.mShadowImageHeight = a.getDimension(attr, 200 * _1dp);     } }        }    }    private void setViewToAttr(int pWidth, int pHeight) {        if (null != mImageDrawable) { this.mView.setBackgroundDrawable(mImageDrawable);        }        if (null != mPushImageDrawable) { this.mPushView.setBackgroundDrawable(mPushImageDrawable);        }        if (null != mCloseImageDrawable) { this.mCloseView.setBackgroundDrawable(mCloseImageDrawable);        }        if (null != mShadowImageDrawable) { this.mShadowView.setBackgroundDrawable(mShadowImageDrawable);        }        frameLayout.LayoutParams viewLP = (frameLayout.LayoutParams) this.mView.getLayoutParams();        viewLP.width = (int) mImageWidth;        viewLP.height = (int) mImageHeight;        int left = 0, top = 0;        if (mCenterInParent) { left = pWidth / 2 - viewLP.width / 2; top = pHeight / 2 - viewLP.height / 2;        } else { if (mLeft > 0) left = mLeft; if (mTop > 0) top = mTop;        }        viewLP.leftMargin = left;        viewLP.topMargin = top;        this.mView.setLayoutParams(viewLP);        this.mShadowView.setLayoutParams(viewLP);        frameLayout.LayoutParams pushViewLP = (frameLayout.LayoutParams) mPushView.getLayoutParams();        pushViewLP.width = (int) mPushImageWidth;        pushViewLP.height = (int) mPushImageHeight;        pushViewLP.leftMargin = (int) (viewLP.leftMargin + mImageWidth - mPushImageWidth / 2);        pushViewLP.topMargin = (int) (viewLP.topMargin + mImageHeight - mPushImageHeight / 2);        mPushView.setLayoutParams(pushViewLP);        frameLayout.LayoutParams closeViewLP = (frameLayout.LayoutParams) mCloseView.getLayoutParams();        closeViewLP.width = (int) mCloseImageWidth;        closeViewLP.height = (int) mCloseImageHeight;        closeViewLP.leftMargin = (int) (viewLP.leftMargin - mCloseImageWidth / 2);        closeViewLP.topMargin = (int) (viewLP.topMargin - mCloseImageHeight / 2);        mCloseView.setLayoutParams(closeViewLP);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        setParamsForView(widthMeasureSpec, heightMeasureSpec);    }    private boolean hasSetParamsForView = false;    private void setParamsForView(int widthMeasureSpec, int heightMeasureSpec) {        ViewGroup.LayoutParams layoutParams = getLayoutParams();        if (null != layoutParams && !hasSetParamsForView) { System.out.println(""); hasSetParamsForView = true; int width; if ((getLayoutParams().width == LayoutParams.MATCH_PARENT)) {     width = MeasureSpec.getSize(widthMeasureSpec); } else {     width = getLayoutParams().width; } int height; if ((getLayoutParams().height == LayoutParams.MATCH_PARENT)) {     height = MeasureSpec.getSize(heightMeasureSpec); } else {     height = getLayoutParams().height; } setViewToAttr(width, height);        }    }    public boolean onTouchEvent (MotionEvent event){        final int action = event.getAction();        final int x = (int) event.getX();        final int y = (int) event.getY();        switch (action & MotionEventCompat.ACTION_MASK) { case MotionEvent.ACTION_DOWN:     if (!region.contains(x, y)) {         mShadowView.setVisibility(INVISIBLE);         mCloseView.setVisibility(GONE);         mPushView.setVisibility(GONE);     }     break;        }        return true;    }}

最后,我们必须将这些行添加到ViewOnTouchListener.java文件中:

        mShadowView.setVisibility(View.VISIBLE);        mCloseView.setVisibility(View.VISIBLE);        mPushView.setVisibility(View.VISIBLE);

因此,该文件将是:

package com.seifi.dragtestapplication;import android.graphics.Point;import android.view.MotionEvent;import android.view.View;import android.widget.frameLayout;class ViewonTouchListener implements View.onTouchListener {    Point pushPoint, closePoint;    int lastImgLeft;    int lastImgTop;    frameLayout.LayoutParams viewLP;    frameLayout.LayoutParams pushBtnLP;    frameLayout.LayoutParams closeBtnLP;    int lastPushBtnLeft, lastCloseBtnLeft;    int lastPushBtnTop, lastCloseBtnTop;    private View mPushView, mCloseView, mShadowView;    ViewonTouchListener(View mPushView, View mCloseView, View mShadowView) {        this.mPushView = mPushView;        this.mCloseView = mCloseView;        this.mShadowView = mShadowView;    }    @Override    public boolean onTouch(View view, MotionEvent event) {        switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN:     if (null == viewLP) {         viewLP = (frameLayout.LayoutParams) view.getLayoutParams();     }     if (null == pushBtnLP) {         pushBtnLP = (frameLayout.LayoutParams) mPushView.getLayoutParams();     }     if (null == closeBtnLP) {         closeBtnLP = (frameLayout.LayoutParams) mCloseView.getLayoutParams();     }     closePoint = getRawPoint(event);     pushPoint = getRawPoint(event);     lastImgLeft = viewLP.leftMargin;     lastImgTop = viewLP.topMargin;     lastPushBtnLeft = pushBtnLP.leftMargin;     lastPushBtnTop = pushBtnLP.topMargin;     lastCloseBtnLeft = closeBtnLP.leftMargin;     lastCloseBtnTop = closeBtnLP.topMargin;     (mShadowView).setBackgroundResource(R.drawable.my_shadow_pressed);     mShadowView.setVisibility(View.VISIBLE);     mCloseView.setVisibility(View.VISIBLE);     mPushView.setVisibility(View.VISIBLE);     break; case MotionEvent.ACTION_MOVE:     Point newPoint = getRawPoint(event);     float moveX = newPoint.x - pushPoint.x;     float moveY = newPoint.y - pushPoint.y;     viewLP.leftMargin = (int) (lastImgLeft + moveX);     viewLP.topMargin = (int) (lastImgTop + moveY);     view.setLayoutParams(viewLP);     pushBtnLP.leftMargin = (int) (lastPushBtnLeft + moveX);     pushBtnLP.topMargin = (int) (lastPushBtnTop + moveY);     mPushView.setLayoutParams(pushBtnLP);     closeBtnLP.leftMargin = (int) (lastCloseBtnLeft + moveX);     closeBtnLP.topMargin = (int) (lastCloseBtnTop + moveY);     mCloseView.setLayoutParams(closeBtnLP);     break; case MotionEvent.ACTION_UP: {     (mShadowView).setBackgroundResource(R.drawable.my_shadow);     break; }        }        return false;    }    private Point getRawPoint(MotionEvent event) {        return new Point((int) event.getRawX(), (int) event.getRawY());    }}

现在,一切都OK,它运作完美。视频链接



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/514506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号