有哪位大神知道怎样在Fragment里做个可拖动的控件

一杯酒几分愁 2017-08-25 11:42:49
这是我之前做的,可移动区域就只有这么点是什么原因要怎么改啊


我的imageview控件代码是这样的

@TargetApi(Build.VERSION_CODES.HONEYCOMB) public class FragmentMsg extends Fragment implements
View.OnClickListener{
private boolean clickormove = true;//点击或拖动,点击为true,拖动为false
private int downX, downY;//按下时的X,Y坐标
private boolean hasMeasured = false;//ViewTree是否已被测量过,是为true,否为false
private View content;//界面的ViewTree
private int screenWidth,screenHeight;//ViewTree的宽和高
private ImageView msg_fabu ;//可拖动按钮
@Nullable @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_msg,container,false);
intent=new Intent(getActivity(), FBSCActivityNew.class);
intent.putExtra("info", "f");
initView(view);
onClick();

content = getActivity().getWindow().findViewById(Window.ID_ANDROID_CONTENT);//获取界面的ViewTree根节点View
DisplayMetrics dm = getResources().getDisplayMetrics();//获取显示屏属性
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
ViewTreeObserver vto = content.getViewTreeObserver();//获取ViewTree的监听器
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// TODO Auto-generated method stub
if(!hasMeasured)
{
screenHeight = content.getMeasuredHeight();//获取ViewTree的高度
hasMeasured = true;//设置为true,使其不再被测量。
}
return true;//如果返回false,界面将为空。
}
});
// msg_fabu = (Button) view.findViewById(R.id.msg_fabu);
msg_fabu.setOnTouchListener(new View.OnTouchListener() {//设置按钮被触摸的时间
int lastX, lastY; // 记录移动的最后的位置
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int ea = event.getAction();//获取事件类型
switch (ea) {
case MotionEvent.ACTION_DOWN: // 按下事件
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
downX = lastX;
downY = lastY;
break;
case MotionEvent.ACTION_MOVE: // 拖动事件
// 移动中动态设置位置
int dx = (int) event.getRawX() - lastX;//位移量X
int dy = (int) event.getRawY() - lastY;//位移量Y
int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;
//++限定按钮被拖动的范围
if (left < 0) {
left = 0;
right = left + v.getWidth();
}
if (right > screenWidth) {
right = screenWidth;
left = right - v.getWidth();
}
if (top < 0) {
top = 0;
bottom = top + v.getHeight();
}
if (bottom > screenHeight) {
bottom = screenHeight;
top = bottom - v.getHeight();
}
//--限定按钮被拖动的范围
v.layout(left, top, right, bottom);//按钮重画

// 记录当前的位置
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP: // 弹起事件
//判断是单击事件或是拖动事件,位移量大于5则断定为拖动事件
if (Math.abs((int) (event.getRawX() - downX)) > 5
|| Math.abs((int) (event.getRawY() - downY)) > 5)
clickormove = false;
else
clickormove = true;
break;
}
return false;
}
});
...全文
545 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
一杯酒几分愁 2017-09-07
  • 打赏
  • 举报
回复
引用 6 楼 jklwan 的回复:
[quote=引用 5 楼 qq_37840482 的回复:] 父控件是个RelativeLayout,RelativeLayout外面还有个RelativeLayout,布局最外层是个线性布局;而这个布局又镶嵌在Fragment中
那就不要用imageview的拖动了,应该用RelativeLayout来拖动来了,getleft都是相对于父控件的。[/quote] 我直接把RelativeLayout给删掉了,可以拖动了,但是怎么我的listview滑倒顶部或者底部控件就复位了呢
jklwan 2017-09-06
  • 打赏
  • 举报
回复
引用 5 楼 qq_37840482 的回复:
父控件是个RelativeLayout,RelativeLayout外面还有个RelativeLayout,布局最外层是个线性布局;而这个布局又镶嵌在Fragment中
那就不要用imageview的拖动了,应该用RelativeLayout来拖动来了,getleft都是相对于父控件的。
一杯酒几分愁 2017-09-06
  • 打赏
  • 举报
回复
引用 4 楼 jklwan 的回复:
布局写错了吧,父控件是什么呢。


父控件是个RelativeLayout,RelativeLayout外面还有个RelativeLayout,布局最外层是个线性布局;而这个布局又镶嵌在Fragment中
jklwan 2017-09-06
  • 打赏
  • 举报
回复
布局写错了吧,父控件是什么呢。
江三木洛 2017-09-06
  • 打赏
  • 举报
回复
引用 6 楼 jklwan 的回复:
[quote=引用 5 楼 qq_37840482 的回复:] 父控件是个RelativeLayout,RelativeLayout外面还有个RelativeLayout,布局最外层是个线性布局;而这个布局又镶嵌在Fragment中
那就不要用imageview的拖动了,应该用RelativeLayout来拖动来了,getleft都是相对于父控件的。[/quote] 再加一句,监听的也应该是RelativeLayout
想养一只猫 2017-09-06
  • 打赏
  • 举报
回复
ViewDragHelper 神器
一杯酒几分愁 2017-09-05
  • 打赏
  • 举报
回复
求大神帮我看看
一杯酒几分愁 2017-09-05
  • 打赏
  • 举报
回复
有 人 没 有 啊
一杯酒几分愁 2017-08-25
  • 打赏
  • 举报
回复
那位大神帮我看看啊

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧