Scroller代码(二)

public class TestTextView extends Activity {
/** Called when the activity is first created. */
LinearLayout lay1,lay2,lay;
private Scroller mScroller;
private boolean s1,s2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ScrollView s;
mScroller = new Scroller(this);
//HorizontalScrollView hv = new HorizontalScrollView(this);
lay1 = new LinearLayout(this){
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
// mScrollX = mScroller.getCurrX();
scrollTo(mScroller.getCurrX(), 0);
postInvalidate();
}
}

};
lay2 = new LinearLayout(this){
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
// mScrollX = mScroller.getCurrX();
scrollTo(mScroller.getCurrX(), 0);
postInvalidate();
}
}

};

lay1.setBackgroundColor(this.getResources().getColor(android.R.color.darker_gray));
lay2.setBackgroundColor(this.getResources().getColor(android.R.color.white));
lay = new LinearLayout(this);
lay.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams p0 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
this.setContentView(lay, p0);

LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
p1.weight=1;
lay.addView(lay1,p1);
LinearLayout.LayoutParams p2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
p2.weight=1;
lay.addView(lay2,p2);
TestButton tx = new TestButton(this);
TestButton tx2 = new TestButton(this);
tx.setText("aaaaaaaaa");
//tx.setBackgroundColor(this.getResources().getColor(android.R.color.black));
tx2.setText("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
tx.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
if(!s1){
mScroller.startScroll(0, 0, 10, 10,10);
s1 = true;
}else{
mScroller.startScroll(0, 0, -10, -10,10);
s1 = false;
}
}

});
tx2.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
if(!s2){
mScroller.startScroll(0, 0, 20, 20,10);
s2=true;
}else{
mScroller.startScroll(20, 20, -20, -20,10);
s2=false;
}

}

});
tx2.setOnKeyListener(new Listener());
lay1.addView(tx);
lay2.addView(tx2);
}

如果点击BUTTON1时,mScroller开始滚动,导致LAY1发生滚动,LAY2不变(背景LAY也不便)

如果点击BUTTON2时,mScroller开始滚动,导致LAY2发生滚动,LAY1不变(背景LAY也不便)

通过这个例子看出

/**
* Called by a parent to request that a child update its values for mScrollX
* and mScrollY if necessary. This will typically be done if the child is
* animating a scroll using a {@link android.widget.Scroller Scroller}
* object.
*/
public void computeScroll()

只有当前LAYOUT中的某个CHILD导致SCROLL发生滚动,才会致使自己的COMPUTESCROLL被调用。

并没有直接的代码指示,哪一个LAYOUT和SCROLLER有联系。

以下理解未考证:

每一个窗口打开时,默认的整个背景LAYOUT长宽与一个虚拟的scroller保持一致,当scroller移动坐标时

layout可以通过计算scroll移动的横向纵向坐标及距离来引发自己的scroll

每一个view都会有scrollto,by方法,通过此方法可以滚动本身view.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值