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次のように、ビアの周囲全体に厚さ 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;
    }

2 つを組み合わせて でパディングを設定し、 のセクションでOnLongClickListenerパディングを削除することができます。MotionEvent.ACTION_UPOnTouchListener

于 2013-05-09T11:27:51.463 に答える