关于Android中动态调整View位置,会自动拉伸变形问题【解决】

liu_thunders 2017-10-20 01:57:26
近期公司有点小需求,开始学习写一点Android的东东,中间有用到一个浮动按纽功能,但是在使用中,发现 自己做了View的移动 ,在遇到屏幕中线时会导致移动的View都有很大的几率变形,问了一些老的Android技术人员,还背骂了(就一个浮动按纽这么久还这么多破事),哎。郁闷,那孩子还比我小好几岁。查了半天资料也不好解决,结果查到
以下两个帖子
http://bbs.csdn.net/topics/390714856?page=1
http://blog.csdn.net/nihaoqiulinhe/article/details/51831008

但是都没有从根源上解决问题,结果以自己的想法试了一下 基本成功了。这里来给大家分享一下,就自己写了一个函数

public static void setPosition(View view,int x,int y)
{
if(view == null)
return;

int parentWidth = 0;
int parentHeight= 0;
ViewParent viewParent = view.getParent();
if(viewParent instanceof View)
{
parentWidth = ((View)viewParent).getWidth();
parentHeight= ((View)viewParent).getHeight();
}

ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(view.getLayoutParams());

int right = x + margin.width;
int bottom = y + margin.height;
if(right > parentWidth || bottom > parentHeight)
{
margin.setMargins(x,y, right, bottom);
}
else
{
margin.leftMargin = x;
margin.topMargin = y;
}
view.setLayoutParams(newLayoutParams(view,margin));
}
//------------------------
/**
* 根据控件类型创建Params
* */
private static ViewGroup.LayoutParams newLayoutParams(View view,ViewGroup.MarginLayoutParams margin)
{
ViewGroup.LayoutParams layoutParams = null;
if(view instanceof LinearLayout)
{
layoutParams = new LinearLayout.LayoutParams(margin);
}
else if(view instanceof GridLayout)
{
layoutParams = new GridLayout.LayoutParams(margin);
}
else if(view instanceof FrameLayout)
{
layoutParams = new FrameLayout.LayoutParams(margin);
}
else if(view instanceof TableLayout)
{
layoutParams = new TableLayout.LayoutParams(margin);
}
else
{
layoutParams = new RelativeLayout.LayoutParams(margin);
}

return layoutParams;
}



我要移动的View的父对像是RelativeLayout不然是别的就被定死了位置了不能变形了。同时测试过FrameLayout为移动View时会崩溃,郁闷,也没有时间和心思去查相关资料了,就没有理了


希望以上的功能对相关同学有用
...全文
419 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

80,349

社区成员

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

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