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
分享到:
相关推荐
使用画廊做的一个带有倒影的画廊 ... imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2)); imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2)); mCamera.restore(); } }
主要解析了Android自定义View绘制的方法及过程,介绍了onSizeChanged、onDraw、onMeasure顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2.在其onSizeChanged方法中设置view的宽高; 3.在onDraw方法中,通过Canvas和Paint,绘制x轴,绘制y轴,绘制文字,绘制折 线,绘制折线穿过的点 适合人群:具备一定编程基础,工作1-3年的研发人员 学习价值:...
本篇文章讲的是自定义View之边缘凹凸的优惠券效果,之前有见过很多优惠券的效果都是使用了边缘凹凸的样式。和往常一样,主要总结一下在自定义View的开发过程中需要注意的一些地方。 按照惯例,我们先来看看效果图 ...
2、使用一个可以重叠的布局比如FrameLayout、RelativeLayout等,在布局底部放置一个充满屏幕的自定义布局,重写onSizeChanged方法,当高度变化超过100(认为超过100时是软件盘弹出或者隐藏的操作)时,调用接口回调...
import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget....
titleBar.Height = 18; titleBar.Padding = new Padding(3); titleBar.MouseDown += new MouseEventHandler(titleBar_MouseDown); titleBar.MouseMove += new MouseEventHandler(titleBar_MouseMove); titleBar...
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...
在 CCWin.SkinControl.SkinProgressBar.zaQVELrRJhtyA08jRC9Q(Object , Object , Rectangle ) 在 CCWin.SkinControl.SkinProgressBar.OnResize(EventArgs e) 在 System.Windows.Forms.Control.OnSizeChanged...
cocos2d-x-bugfixes-list Android Bug-Fix:游戏在打开时会停止播放音乐 iOS错误修复:应用程序崩溃/... 如下修改Cocos2dxGLSurfaceView.java中的onSizeChanged方法 @Override protected void onSizeChanged(final
1、新建自定义View,重写构造方法,初始化Paint、Path; 2、确定起始点、终止点、控制点坐标,这里我们直接固定: @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super....
我们可以在AndroidManifest.xml的Activity设置属性:Android:windowSoftInputMode = “adjustResize” ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustRes
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 ...
圆路径自定义路径动画先放个效果图看看小球沿着圆形轨迹运动,感兴趣的朋友,可以下载原始看看。起因:我是做蓝牙开发的,就是蓝牙智能锁,项目需要一个'添加钥匙'效果这个东西很简单,很基础的知识。如果你是大神,...
在onSizeChanged(int w, int h, int oldw, int oldh)方法里面,根据View的长宽,计算出雷达图的半径(这里取布局宽高最小值的四分之一,可以自定义),获取整个布局的中心坐标。 public class CreditScoreView ...
SemiCircleCreate a ...②:设置大小(在方法onSizeChanged中): outRect = new RectF(getPaddingLeft(), getPaddingTop(), w-getPaddingRight(), h-getPaddingBottom());③:画矩形(在方法onDraw中): canvas.drawR
软键盘弹出时动态改变UI布局学习Demo