Android View中的setMeasuredDimension方法

继承View,实现自己想要的组件,那么需要使用到setMeasuredDimension这个方法,这个方法决定了当前View的大小,请看代码:

View的代码:

Java代码   收藏代码
  1. package cc.mdev.test;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.text.TextPaint;  
  7. import android.util.AttributeSet;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10.   
  11. public class MyScrollView extends View {  
  12.   
  13. public MyScrollView(Context context, AttributeSet attrs) {  
  14. super(context, attrs);  
  15. }  
  16.   
  17. public MyScrollView(Context context) {  
  18. super(context);  
  19. }  
  20. @Override  
  21. protected void onDraw(Canvas canvas) {  
  22. TextPaint paint = new TextPaint();  
  23. paint.setAntiAlias(true);  
  24. canvas.drawColor(Color.GRAY);  
  25. for (int i = 10; i < 500; i++) {  
  26. canvas.drawText("This is the scroll text."10, i, paint);  
  27. i = i+15;  
  28. }  
  29. }  
  30.   
  31. @Override  
  32. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  33. String tag="onMeasure";  
  34. Log.e(tag, "Scroll View on measure...");  
  35. setMeasuredDimension(200800);  
  36. }  
  37.   
  38. @Override  
  39. protected void onScrollChanged(int l, int t, int oldl, int oldt) {  
  40. String tag = "onScrollChanged";  
  41. Log.e(tag, "Scroll....");  
  42. super.onScrollChanged(l, t, oldl, oldt);  
  43. }  
  44. }  
 




布局文件:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <Button android:text="Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <cc.mdev.test.MyScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"/> </ScrollView> </LinearLayout>   
 



效果就是自定义视图的大小为
200, 800,并且放入到ScrollView中,ScrollView会启作用,如果不使用setMeasuredDimension这个方法,那么
ScrollView不会有作用。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在自定义 View ,paddingLeft 和 paddingRight 可以通过以下方式来处理: 1. 在 onMeasure() 方法,需要将 View 的实际宽度减去左右 padding 的值,这样可以确保 View 在绘制时不会被 padding 所占据。 2. 在 onDraw() 方法,绘制的内容应该是从 padding 区域开始的,这样可以确保绘制的内容不会被 padding 所覆盖。 下面是一个简单的示例代码: ``` public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int paddingLeft = getPaddingLeft(); int paddingRight = getPaddingRight(); int contentWidth = width - paddingLeft - paddingRight; setMeasuredDimension(contentWidth, height); } @Override protected void onDraw(Canvas canvas) { int paddingLeft = getPaddingLeft(); int paddingTop = getPaddingTop(); int paddingRight = getPaddingRight(); int paddingBottom = getPaddingBottom(); int contentWidth = getWidth() - paddingLeft - paddingRight; int contentHeight = getHeight() - paddingTop - paddingBottom; canvas.drawRect(paddingLeft, paddingTop, paddingLeft + contentWidth, paddingTop + contentHeight, new Paint()); } } ``` 在这个示例,我们在 onMeasure() 方法处理了左右 padding,以确保 View 在绘制时不会被 padding 所占据。在 onDraw() 方法,我们使用了 getPaddingLeft() 和 getPaddingRight() 方法来获取左右 padding 的值,然后绘制了一个矩形,确保绘制的内容不会被 padding 所覆盖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值