如何在ConstraintLayout中用链实现单个View动画并设置current参数
如何实现图标列表的滑动触摸动画并设置current参数?
我想要实现图标列表滑动时,当前触摸到的图标高度变为400的View动画,该如何操作?我已有如下代码,但不知如何设置参数current?
动画逻辑说明
当用户手指在图标列表上滑动时,将当前触摸到的图标高度设置为400。
TransitionManager.beginDelayedTransition(layout); View child = layout.getChildAt(current); child.setMinimumHeight(400);
其中current为int类型。
嘿,别担心,我来帮你搞定current参数的设置问题!核心思路是通过触摸事件监听,根据触摸坐标计算出当前触摸到的子View索引,具体操作步骤和代码如下:
步骤1:给图标列表添加触摸监听
你需要给承载图标的layout(也就是你的ViewGroup容器)设置OnTouchListener,在触摸事件里判断当前触摸点落在哪个子View上。
步骤2:实现触摸逻辑计算current
这里假设你的图标列表是垂直排列的,如果是水平排列,只需要把Y坐标换成X坐标,判断条件换成左右边界即可:
// 假设layout是你的图标列表容器(比如LinearLayout) layout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 处理按下和滑动事件 if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { float touchY = event.getY(); int childCount = layout.getChildCount(); int current = -1; // 遍历所有子View,找到触摸点所在的那个 for (int i = 0; i < childCount; i++) { View child = layout.getChildAt(i); int[] childLocation = new int[2]; child.getLocationOnScreen(childLocation); int childTop = childLocation[1]; int childBottom = childTop + child.getHeight(); // 判断触摸点是否在当前子View的范围内 if (touchY >= childTop && touchY <= childBottom) { current = i; break; } } // 如果找到有效的current,执行动画 if (current != -1) { TransitionManager.beginDelayedTransition(layout); // 先把其他子View恢复默认高度(记得替换成你的默认值,比如100) for (int i = 0; i < childCount; i++) { View child = layout.getChildAt(i); if (i != current) { child.setMinimumHeight(100); } } // 设置当前触摸的子View高度为400 View targetChild = layout.getChildAt(current); targetChild.setMinimumHeight(400); } return true; } // 可选:处理抬手事件,比如保持选中状态或恢复所有图标 else if (event.getAction() == MotionEvent.ACTION_UP) { // 这里可以添加你需要的逻辑,比如保持当前选中的图标高度 return true; } return false; } });
补充说明
- 如果是水平列表:将
event.getY()改为event.getX(),判断条件换成子View的childLeft和childRight(通过child.getLeft()和child.getRight()获取) - 别忘了给子View设置默认的
minimumHeight,这样切换触摸目标时,之前的图标才能恢复原状 - 如果用的是RecyclerView,逻辑类似,但可以结合
RecyclerView.OnItemTouchListener来更精准地处理触摸事件
内容的提问来源于stack exchange,提问作者Kavin Raju S
相关产品推荐
相关产品推荐

