`

2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged

阅读更多
2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged

参考:http://gundumw100.iteye.com/blog/1139214

onFinishInflate 当View中所有的子控件均被映射成xml后触发
onSizeChanged 当view的大小发生变化时触发

先看一下执行顺序 
ButtonWaveView 为自定义组合组件

public class ButtonWaveView extends LinearLayout {


	
	public ButtonWaveView(Context context) {
		super(context);
	}
	public ButtonWaveView(Context context, AttributeSet attrs) {
		super(context, attrs);
		System.out.println("ButtonWaveView");
		
	}
	
	
	
	@Override
	protected void onFinishInflate() {
		super.onFinishInflate();
		System.out.println("onFinishInflate");
	}
	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		System.out.println("onSizeChanged");
	}
	
}



MainActivity.java

public class MainActivity extends Activity {
	private ButtonWaveView bwv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("1111111111111");
        setContentView(R.layout.buttonwaveview);
        
        bwv = (ButtonWaveView)findViewById(R.id.bwv);
        System.out.println("22222222222222222222222");
    }
    
}


这个结果为:
11111111111111
ButtonWaveView
onFinishInflate
22222222222222222222222


可以看出来 构造方法和onFinishInflate都是在
setContentView(R.layout.buttonwaveview);

就开始执行了 然后再回执行onCreate后面的代码

我见的自定义组合组件 大多有两种
1、在onSizeChanged里面写
2、在onFinishInflate里面写


1、onSizeChanged
其实 上面的代码onSizeChanged是不会执行 ,因为大家也看到了 它是在view大小发生改变时 才执行的
看我参考的那篇文章,所有代码都是在onSizeChanged里面写的 但是onSizeChanged不执行怎么办?所以 在构造方法里面
setBackgroundResource(R.drawable.tabswitcher_long);

设置了背景图片 认为的改变view 这样就可以调用onSizeChanged了

2、onFinishInflate

这个里面写也是可以的 但是 有一个问题
假如说 我在Activity里面 需要设置自定义组件ButtonWaveView 的一些变量,而且这些变量(例如 width,height)是必须在addview前面调用的
我们的set方法肯定是写在onCreat里面的 但是前面我们也看到了 onFinishInflate是先于执行的  这时 我们的程序就有问题了

解决方法有两个
1、用onSizeChanged
2、用自定义属性


自定义属性

参考:http://mycoding.iteye.com/blog/1001889



分享到:
评论

相关推荐

    Android组件ConverFlow(继承Gallery)

    使用画廊做的一个带有倒影的画廊 ... imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2)); imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2)); mCamera.restore(); } }

    Android自定义View绘制的方法及过程(二)

    主要解析了Android自定义View绘制的方法及过程,介绍了onSizeChanged、onDraw、onMeasure顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Android中的坐标轴的自定义控件的实现

    2.在其onSizeChanged方法中设置view的宽高; 3.在onDraw方法中,通过Canvas和Paint,绘制x轴,绘制y轴,绘制文字,绘制折 线,绘制折线穿过的点 适合人群:具备一定编程基础,工作1-3年的研发人员 学习价值:...

    Android 自定义View之边缘凹凸的优惠券效果的开发过程

    本篇文章讲的是自定义View之边缘凹凸的优惠券效果,之前有见过很多优惠券的效果都是使用了边缘凹凸的样式。和往常一样,主要总结一下在自定义View的开发过程中需要注意的一些地方。 按照惯例,我们先来看看效果图 ...

    仿qq登录界面软键盘弹出时不覆盖登录注册按钮

    2、使用一个可以重叠的布局比如FrameLayout、RelativeLayout等,在布局底部放置一个充满屏幕的自定义布局,重写onSizeChanged方法,当高度变化超过100(认为超过100时是软件盘弹出或者隐藏的操作)时,调用接口回调...

    XIndexableView

    import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget....

    c#t自定义Button

    titleBar.Height = 18; titleBar.Padding = new Padding(3); titleBar.MouseDown += new MouseEventHandler(titleBar_MouseDown); titleBar.MouseMove += new MouseEventHandler(titleBar_MouseMove); titleBar...

    安卓游戏2048

    protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO Auto-generated method stub super.onSizeChanged(w, h, oldw, oldh); int cardWidth=(Math.min(w,h)-10)/4; addCards...

    cskin 最小化报错 句柄无效

    在 CCWin.SkinControl.SkinProgressBar.zaQVELrRJhtyA08jRC9Q(Object , Object , Rectangle ) 在 CCWin.SkinControl.SkinProgressBar.OnResize(EventArgs e) 在 System.Windows.Forms.Control.OnSizeChanged...

    cocos2dx-bugfixes:cocos2d-x v.3.16的错误修复说明

    cocos2d-x-bugfixes-list Android Bug-Fix:游戏在打开时会停止播放音乐 iOS错误修复:应用程序崩溃/... 如下修改Cocos2dxGLSurfaceView.java中的onSizeChanged方法 @Override protected void onSizeChanged(final

    Android贝塞尔曲线初步学习第三课 Android实现添加至购物车的运动轨迹

    1、新建自定义View,重写构造方法,初始化Paint、Path; 2、确定起始点、终止点、控制点坐标,这里我们直接固定: @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super....

    Android 软键盘出现不适应的解决办法总结

     我们可以在AndroidManifest.xml的Activity设置属性:Android:windowSoftInputMode = “adjustResize” ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustRes

    ViewPager 放大缩小左右移动

    public static final int SCROLL_STATE_SETTLING = 2; private int mScrollState = SCROLL_STATE_IDLE; /** * Callback interface for responding to changing state of the selected page. */ public ...

    circlepath:小球轴向圆形轨迹运动,感兴趣的朋友,可以下载原始码看看

    圆路径自定义路径动画先放个效果图看看小球沿着圆形轨迹运动,感兴趣的朋友,可以下载原始看看。起因:我是做蓝牙开发的,就是蓝牙智能锁,项目需要一个'添加钥匙'效果这个东西很简单,很基础的知识。如果你是大神,...

    Android仿支付宝上芝麻信用分雷达图

    在onSizeChanged(int w, int h, int oldw, int oldh)方法里面,根据View的长宽,计算出雷达图的半径(这里取布局宽高最小值的四分之一,可以自定义),获取整个布局的中心坐标。 public class CreditScoreView ...

    BorderImageView:边框图像视图

    SemiCircleCreate a ...②:设置大小(在方法onSizeChanged中): outRect = new RectF(getPaddingLeft(), getPaddingTop(), w-getPaddingRight(), h-getPaddingBottom());③:画矩形(在方法onDraw中): canvas.drawR

    软键盘弹出动态改变UI布局

    软键盘弹出时动态改变UI布局学习Demo

Global site tag (gtag.js) - Google Analytics