2013年4月18日星期四

android動態變更Margin(拖曳效果)


最近寫程式都一直鬼打牆,總是繞不出來,
剛剛又為了一個奇怪的問題一直繞:

要實現拖曳現果,所以動變更leftMargin ﹠ topMargin,
沒想到畫面死都不動,但新增了一個圖案後,
後現剛剛拖曳的效果是有用的,因為原圖已經被拖到指定的位置了,
只是畫面沒有更新;

原程式碼:

@Override
public boolean onScroll(MotionEvent started, MotionEvent current,
float distanceX, float distanceY) {
 if(imgMove){
  layoutParams=(RelativeLayout.LayoutParams)img.getLayoutParams();
  layoutParams.leftMargin=(int)current.getX()-fromPoint.x;
  layoutParams.topMargin=(int)current.getY()-fromPoint.y;
 }
 return false;
}


想說用invalidate()來達成畫面刷新的效果,
結果Android大人鳥都不鳥我;

後來經歴千山萬水後,終於找到解法:

@Override
public boolean onScroll(MotionEvent started, MotionEvent current,
float distanceX, float distanceY) {
 if(imgMove){
  layoutParams=(RelativeLayout.LayoutParams)img.getLayoutParams();
  layoutParams.leftMargin=(int)current.getX()-fromPoint.x;
  layoutParams.topMargin=(int)current.getY()-fromPoint.y;
  img.setLayoutParams(layoutParams);
 }
 return false;
}

加入上面那一行,畫面馬上就可以看到效果了。

又浪費了三個小時的生命,留給後人去乘涼吧!

1 条评论: