ScrollTo,ScrollBy是如何改变子View位置的
来源:互联网 发布:淘宝白底图片的作用 编辑:程序博客网 时间:2024/05/17 04:12
我们知道ScrollTo(int x,int y)、ScrollY(int x,int y)不会改变View本身的位置,但是可以改变子View和本身内容(onDraw中绘制的东西)的位置,口说无凭,下面用一个例子来说明
MyView.java
public class MyView extends ViewGroup{ Paint paint; public MyView(Context context) { this(context, null); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); paint=new Paint(); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(10); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureChildren(widthMeasureSpec,heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int chidCount=getChildCount(); for(int i=0;i<chidCount;i++) { View child=getChildAt(i); child.layout(0,0,child.getMeasuredWidth(),child.getMeasuredHeight()); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(200,200,300,300,paint); }}
MainActivity.java
package com.solo.text;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity{ MyView v1; Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); v1=(MyView)findViewById(R.id.id_v1); bt=(Button)findViewById(R.id.id_bt); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v1.scrollBy(-50,-50); } }); }}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <com.solo.text.MyView android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:id="@+id/id_v1" android:background="#ffc1ffff" android:layout_width="300dp" android:layout_height="400dp" > <View android:background="#ffff0c09" android:layout_width="50dp" android:layout_height="50dp"/> </com.solo.text.MyView> <Button android:id="@+id/id_bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Scroll"/></RelativeLayout>
以上代码的运行效果图如下:
跟我们上面分析的结果一样,红色的子view和绿色的本身内容都改变了位置
我们知道scrollTo和scrollBy会改变view的mScrollX和mScrollY的值
我曾经做个一个测试,发现view.draw(Canvas canvas)中canva的边界为mScrollX,mScrollY,mScrollX+mWidth,mScrollY+mHeight;
设view的边界为(cl,ct,cr,cb),view的父容器为parent,parent的mScrollX=sx,mScrollY=sy
1、当sx=sy=0时,view在parent的位置如图所示:
2、当sx=sy=-50时,view在parent的位置如图所示:
对比上面两幅图我们可以看出,view在parent中的位置移动了(-mScrollX,-mScrollY)
0 0
- ScrollTo,ScrollBy是如何改变子View位置的
- View的scrollTo/scrollBy
- View的scrollTo和scrollBy
- View.scrollBy()与View.scrollTo()的使用
- View.scrollBy()与View.scrollTo()的使用
- View.scrollBy()与View.scrollTo()的使用
- View的scrollTo和scrollBy的区别
- Android View 的scrollTo 和 scrollBy方法
- android View的ScrollBy ScrollTo getScrollX getScrollY
- View的移动(offsetTopAndBottom,scrollBy,scrollTo)
- View的scrollTo(),scrollBy()以及Scroller,OverScroller
- android View的scrollTo,scrollBy方法详解
- Android中关于View的ScrollTo、ScrollBy
- View的滑动之ScrollTo和ScrollBy
- Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()
- 图解Android View的scrollTo(),scrollBy()
- Android View scrollTo scrollBy
- View[3] scrollTo、scrollBy
- Linux netstat --检验本机各端口的网络连接情况
- TortoiseSVN异常:在工作拷贝执行update时,报错--CleanUp
- 日记——!
- Ajax学习笔记
- 【UVA11178】Morley's Theorem——Morley 定理
- ScrollTo,ScrollBy是如何改变子View位置的
- Linux nl --让输出的文件内容自动加上行号
- 移动机器人技术
- SWUST OJ 1804 二进制
- Linux学习要点总结
- Wuartz Cron表达式的格式
- iOS WKWebView高度自适应以及截获页面点击的url
- 各种编码
- Android 程序框架设计