0

在我的 android 应用程序中,我想将边框设置ImageView为长按时的边框。当用户释放视图时,我还想删除相同的(边框)。请任何人帮助我吗?

@Override
public boolean onTouchEvent(MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            mTouchDownX = (int) event.getX();
            mTouchDownY = (int) event.getY();
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            int x = (int) event.getX();
            int y = (int) event.getY();

            if (mDraggedItem >= 0) {
                setDraggedItemPosition(x, y);
                int index = getIndexFromCoordinates(x, y);
                if (index == mDraggedItem || index < 0) break;

                if (index < mDraggedItem) {
                    for (int i = index; i < mDraggedItem; i++) {
                        moveViewToPosition(i, i+1);
                    }
                    for (int i = mDraggedItem-1; i >= index; i--) {
                        View view = mGridMap.get(i);
                        mGridMap.put(i+1, view);
                    }
                } else {
                    for (int i = index; i > mDraggedItem; i--) {
                        moveViewToPosition(i, i-1);
                    }
                    for (int i = mDraggedItem+1; i <= index; i++) {
                        View view = mGridMap.get(i);
                        mGridMap.put(i-1, view);
                    }
                }
                mLog.i("onTouchEvent - ACTION_MOVE - mDraggedItem: "+mDraggedItem+" index: "+index);
                mGridMap.put(index, mDraggedView);
                mDraggedItem = index;
            }
            break;
        }
        case MotionEvent.ACTION_UP: {
            if (mDraggedItem >= 0) {
                Point xy = getCoordinatesFromPosition(mDraggedItem);
                mDraggedView.layout(xy.x, xy.y, xy.x+mChildSize, xy.y+mChildSize);
                mDraggedView.clearAnimation();
                mDraggedView.setPadding(0, 0, 0, 0);
                setOnClickListener(this);
                invalidate();
                mRearrangeListener.onRearrange(mGridMap);
            }
            mDraggedItem = -1;
            for(int i=0;i<mGridMap.size();i++)
            {
            String tag = mGridMap.get(i).getTag().toString();
            }
            break;
        }
    }

    return super.onTouchEvent(event);

}

@Override
public boolean onLongClick(View v) {

    int index = getIndexFromCoordinates(mTouchDownX, mTouchDownY);
    if (index >= 0) {
        // animate this item for enabling drag.
        mDraggedItem = index;
        mDraggedView = mGridMap.get(index);
        mDraggedView.setPadding(2, 2, 2, 2);
        mDraggedView.setBackgroundColor(Color.WHITE);
        setDraggedItemPosition(mTouchDownX, mTouchDownY);
        animateDragged();
    }

    return true;
}
4

2 回答 2

1

ImageView您可以在via a周围添加一个厚度为 2 的白色边框,OnLongClickListener如下所示:

imageView.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
              imageView.setPadding(2, 2, 2, 2);
              imageView.setBackgroundColor(Color.WHITE);
            return true;
        }
    });

您也可以通过以下方式执行此操作OnTouchListener

imageView.setOnTouchListener(new OnTouchListener() {

       @Override
       public boolean onTouch(View v, MotionEvent event) {
            switch(event){
            case MotionEvent.ACTION_DOWN:
                 imageView.setPadding(2, 2, 2, 2);
                 break;
            case MotionEvent.ACTION_UP:
                 imageView.setPadding(0, 0, 0, 0);
                 break;
            }
          return false;
    }

您可以将两者结合起来设置.部分的填充OnLongClickListener,并删除.MotionEvent.ACTION_UPOnTouchListener

于 2013-05-09T11:27:51.463 回答
0

去除背景。使用setbackground(null)setbackground(Color.Transparent)。:)

于 2013-05-16T12:47:45.577 回答