这是我想要做的事情的照片:
所以,我想在拖动调整大小的锚点(黑色四边形)时调整单个单元格的大小,这些锚点是ImageViews。为此,我将自定义onTouchListener附加到MotionEvent.ACTION_MOVE中的下一个:
这样做的结果是细胞大小调整,但有一些闪烁之王,更像是左/右或上/下摇动,有一些小偏移。
我的猜测是问题来自于捕获移动事件,然后我手动改变锚点的位置然后,当它再次捕获移动事件时它不会很好地处理这个改变......或者某事
我有一个想法是在每个锚点下放置不可见的ImageViews,并根据它们的移动调整大小,但在拖动时不要移动该锚点。然后,当我解除它时,它与相应的可见锚点对齐。但这比解决方案更具攻击性:)
最后,anubody知道为什么会这样吗?
编辑: 这是我手动移动事件的代码:
float dragY = event.getRawY() - resizePreviousPositionY;
LinearLayout.LayoutParams componentParams = (LinearLayout.LayoutParams)selectedComponent.layout.getLayoutParams();
LinearLayout parrent = (LinearLayout)selectedComponent.layout.getParent();
View topSibling = parrent.getChildAt(parrent.indexOfChild(selectedComponent.layout) - 1);
LinearLayout.LayoutParams topSiblingParams = (LinearLayout.LayoutParams)topSibling.getLayoutParams();
if(dragY > 0 && selectedComponent.layout.getHeight() > 100 ||
dragY < 0 && topSibling.getHeight() > 100)
{
componentParams.height = selectedComponent.layout.getHeight() - (int)dragY;
topSiblingParams.height = topSibling.getHeight() + (int)dragY;
//bottomSiblingParams.height = bottomSibling.getHeight();
selectedComponent.layout.setLayoutParams(componentParams);
repositionResizeAnchors(selectedComponent);
}
resizePreviousPositionY = event.getRawY();
这是我重新定位的地方:
if(((LinearLayout)viewHolder.layout.getParent()).getOrientation() == LinearLayout.VERTICAL)
{
leftMargin = ((LinearLayout)viewHolder.layout.getParent()).getLeft() +
viewHolder.layout.getLeft() + viewHolder.layout.getWidth()/2;
}
else
{
leftMargin = viewHolder.layout.getLeft() + viewHolder.layout.getWidth()/2;
}
topMargin = viewHolder.layout.getTop();
params = (RelativeLayout.LayoutParams)resizeTop.getLayoutParams();
params.leftMargin = leftMargin - dpToPx(resizeAnchorRadius/2);
params.topMargin = topMargin - dpToPx(resizeAnchorRadius/2);
resizeTop.setLayoutParams(params);