之前寫過乙個小球隨手指滑動的demo,很簡單,複寫ontouchevent,事件傳遞進來,得到手指觸點位置,通知重繪invalidate, 複寫ondraw方法,傳入觸點座標。這是不斷畫圖的過程。總結一下不畫圖的幾種滑動方式。
1、layout方法
2、offsetleftandright@override
public
boolean
ontouchevent(motionevent event)
lastx = x;
log.e("mrpeng","lastx::::"+ lastx);
lasty = y;
return
true;
}
系統提供乙個對左右上下移動的api方法
3、layoutparamsview myview = findviewbyid(r.id.myview);
myview.offsetleftandright(offsetx);
4、scrollto scrollbylinearlayout.layoutparams layoutparams =
(linearlayout.layoutparams) myview.getlayoutparams();
layoutparams.leftmargin= myview.getleft()+offsetx;
layoutparams.topmargin=myview.gettop()+offsety;
注意,此處移動的是view的content,即讓view 的內容移動,如果viewgroup呼叫此方法,那麼移動的將是所有子view,如果view中使用移動的是view中的內容物,如果是textview,則移動text,imageview,則為drawable物件。
myview.getparent().scrollby(-offsetx,-offsety);
5、scroller
6、動畫scroller mscroller=new scroller(mcontex);
public
void
smoothscrollto(int destx,int desty)
/*** 系統會在繪製view的時候在draw()方法中呼叫該方法,實際就是使用scrollto()方法,
*/@override
public
void
computescroll()
}
屬性動畫<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:interpolator="@android:anim/linear_interpolator"
android:duration="5000">
android:fromxdelta="10"
android:toxdelta="130"
android:fromydelta="30"
android:toydelta="-80"
android:duration="2000"/>
set>
bulabula
時間分發,用一段偽**展示其關係
坑人的滑動衝突public
void
dispatchtouchevent(motionevent ev)else
return consume;
}
1、父view左右滑,子view上下滑
2、父view上下滑,子view也上下滑
3、爺爺…………………… 萬變不離其宗。。。
viewpager+listview本來是有滑動衝突的,但是強大的voewpager已經處理過了,如果是橫向scrollview 巢狀listview
第一種方法,父容器攔截處理,重寫onintercepttouchevent
第二種方法,內部攔截處理,重寫子元素的dispatchtouchevent
第二種方法@override
public
boolean
onintercepttouchevent(motionevent event)
break;
}case motionevent.action_move: else
break;
}case motionevent.action_up:
default:
break;
}log.d(tag, "intercepted=" + intercepted);
mlastx = x;
mlasty = y;
mlastxintercept = x;
mlastyintercept = y;
return intercepted;
}
@override
public
boolean
dispatchtouchevent(motionevent event)
case motionevent.action_move:
break;
}case motionevent.action_up:
default:
break;
}mlastx = x;
mlasty = y;
return
super.dispatchtouchevent(event);
}
View的滑動衝突
外部滑動方向和內部滑動方向一致 上面兩種情況的巢狀 父容器決定事件是否攔截 偽 public boolean onintercepthoverevent motionevent event else break case motionevent.action up 必須返回false,因為actio...
ViewPager子View滑動事件衝突解決
事件分發 public boolean dispatchtouchevent motionevent ev android事件以隧道方式逐層向下傳遞。事件首先由dispatchtouchevent方法分發,分發邏輯如下 return true 由該dispatchtouchevent方法消費並且停止...
ViewPager子View滑動事件衝突解決
事件分發 public boolean dispatchtouchevent motionevent ev android事件以隧道方式逐層向下傳遞。事件首先由dispatchtouchevent方法分發,分發邏輯如下 return true 由該dispatchtouchevent方法消費並且停止...