android移动view之后刷新布局导致移动后的view归回原位置1
来源:互联网 发布:巫妖王之怒数据库 编辑:程序博客网 时间:2024/04/30 12:35
上篇讲了使用动画移动view的位置,但是移动view位置后,布局中如有其它view刷新会导致之前移动的view回归到原始位置。。。
可自定义布局,并在借助重绘解决,具体在onlayout中设置view的位置即可: mView.layout(mLeft, mTop, mRight, mBottom);
自定义的相对布局
public class RefreshRelativeLayout extends RelativeLayout {
View mView;
boolean mNeedLayout = false;
int mLeft = 0;
int mTop = 0;
int mRight = 0;
int mBottom = 0;
public RefreshRelativeLayout(Context context) { this(context, null);}public RefreshRelativeLayout(Context context, AttributeSet attrs) { this(context, attrs, 0);}public RefreshRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);}public void setTargetViewLayout(float xFromDeltaDistance, float xToDeltaDistance, float yFromDeltaDistance, float yToDeltaDistance, int duration, int delay, final boolean isBack) {
// mNeedLayout = false;
mView = getChildAt(2);
moveViewWithAnimation(mView, xFromDeltaDistance, xToDeltaDistance, yFromDeltaDistance, yToDeltaDistance, duration, delay, isBack);
}
@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (mNeedLayout == false) { return; } mView.layout(mLeft, mTop, mRight, mBottom);}/** * 动画移动view并摆放至相应的位置 * * @param view 控件 * @param xFromDeltaDistance x起始位置的偏移量 * @param xToDeltaDistance x终止位置的偏移量 * @param yFromDeltaDistance y起始位置的偏移量 * @param yToDeltaDistance y终止位置的偏移量 * @param duration 动画的播放时间 * @param delay 延迟播放时间 * @param isBack 是否需要返回到开始位置 */public void moveViewWithAnimation(final View view, final float xFromDeltaDistance, final float xToDeltaDistance, final float yFromDeltaDistance, final float yToDeltaDistance, int duration, int delay, final boolean isBack) { //创建位移动画 TranslateAnimation ani = new TranslateAnimation(xFromDeltaDistance, xToDeltaDistance, yFromDeltaDistance, yToDeltaDistance); ani.setInterpolator(new OvershootInterpolator());//设置加速器 ani.setDuration(duration);//设置动画时间 ani.setStartOffset(delay);//设置动画延迟时间 //监听动画播放状态 ani.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { int deltaX = (int) (xToDeltaDistance - xFromDeltaDistance); int deltaY = (int) (yToDeltaDistance - yFromDeltaDistance); int layoutX = view.getLeft(); int layoutY = view.getTop(); int tempWidth = view.getWidth(); int tempHeight = view.getHeight(); view.clearAnimation(); if (isBack == false) { layoutX += deltaX; layoutY += deltaY; view.layout(layoutX, layoutY, layoutX + tempWidth, layoutY + tempHeight); } else { view.layout(layoutX, layoutY, layoutX + tempWidth, layoutY + tempHeight); } mLeft = layoutX; mTop = layoutY; mRight = layoutX + tempWidth; mBottom = layoutY + tempHeight; mNeedLayout = true; } }); view.startAnimation(ani);}
布局文件
0 0
- android移动view之后刷新布局导致移动后的view归回原位置1
- android移动view之后刷新布局导致移动后的view归回原位置2
- 移动View位置时,修改图片资源导致View在原位置闪烁的问题
- 移动 view 的位置
- Android-->View.setX()和.setY()的使用(移动布局,设置布局位置,动态添加View)
- 移动View试图位置
- android移动View位置(动画)
- Android抽屉效果(使用LayoutParams来移动View的位置)
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- android移动view
- android view 移动
- android view移动总结
- android 移动view
- android移动View
- Android的View绘图并移动
- Ceph分布式存储系统介绍
- 《剑指Offer》读书笔记08:跳台阶
- 控件拖动
- java的JDK、JRE、JVM的区别和联系
- 11.27sission总结
- android移动view之后刷新布局导致移动后的view归回原位置1
- Xml.
- LeetCode题解:Nim Game
- android移动view之后刷新布局导致移动后的view归回原位置2
- Objective-C的m文件中定义变量
- 07-渲染流程-5-Sprite渲染-QuadCommand
- mybatis示例
- 第十九节 协议栈五向按键
- java.lang.NumberFormatException: For input string: "undefined"