自定义View的简单介绍与简单使用
android view有以下14个周期:
1、onFinishInflate() 当View中所有的子控件均被映射成xml后触发 。
2、onMeasure( int , int ) 确定所有子元素的大小 。
3、onLayout( boolean , int , int , int , int ) 当View分配所有的子元素的大小和位置时触发 。
4、onSizeChanged( int , int , int , int ) 当view的大小发生变化时触发 。
5、onDraw(Canvas) view渲染内容的细节。
6、onKeyDown( int , KeyEvent) 有按键按下后触发 。
7、onKeyUp( int , KeyEvent) 有按键按下后弹起时触发 。
8、onTrackballEvent(MotionEvent) 轨迹球事件 。
9、onTouchEvent(MotionEvent) 触屏事件 。
10、onFocusChanged( boolean , int , Rect) 当View获取或失去焦点时触发 。
11、onWindowFocusChanged( boolean ) 当窗口包含的view获取或失去焦点时触发 。
12、onAttachedToWindow() 当view被附着到一个窗口时触发 。
13、onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和 onAttachedToWindow() 是相反的。
14、onWindowVisibilityChanged( int ) 当窗口中包含的可见的view发生变化时触发。

package com.example.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class CoustomView extends View {
Paint paint=new Paint();
public CoustomView(Context context,AttributeSet attrs) {
super(context, attrs);
initPaint();
}
//初始化 画笔
private void initPaint() {
//是否抗锯齿
paint.setAntiAlias(true);
//设置画笔颜色额
paint.setColor(Color.BLACK);
//设置画笔的宽度 如果设置为0 默认就是1px
paint.setStrokeWidth(2);
//设置样式 当前描边不填充
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//线
canvas.drawLine(0,0,100,100,paint);
//矩形
RectF rectF=new RectF(100,100,200,200);
canvas.drawRect(rectF,paint);
//圆
canvas.drawCircle(300,300,140,paint);
//扇形
RectF rectF1=new RectF(400,400,500,500);
canvas.drawArc(rectF1,0,180,true,paint);
//椭圆
RectF rectF2=new RectF(400,380,600,600);
canvas.drawOval(rectF2,paint);
}
}
<com.example.myview.CoustomView
android:id="@+id/myview"
android:layout_width="match_parent"
android:layout_height="match_parent" />

package com.example.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class DianShan extends View implements Runnable{
Paint paint1=new Paint();
Paint paint2=new Paint();
Paint paint3=new Paint();
Paint paint=new Paint();
int start1;
int start2;
int start3;
int width;
int hight;
public DianShan(Context context, AttributeSet attrs) {
super(context, attrs);
paint1.setColor(Color.BLUE);
paint1.setStyle(Paint.Style.FILL);
paint1.setStrokeWidth(2);
paint1.setAntiAlias(true);
paint2.setColor(Color.YELLOW);
paint2.setStyle(Paint.Style.FILL);
paint2.setStrokeWidth(2);
paint2.setAntiAlias(true);
paint3.setColor(Color.GREEN);
paint3.setStyle(Paint.Style.FILL);
paint3.setStrokeWidth(2);
paint3.setAntiAlias(true);
paint.setColor(Color.GRAY);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.hight=h;
this.width=w;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rectF1=new RectF(width/2-50,hight/2-125,width/2+50,hight/2-75);
canvas.drawOval(rectF1,paint);
canvas.drawLine(width/2,hight/2,width/2,hight/2-100,paint);
RectF rectF=new RectF(-width/2,-width/2,width/2,width/2);
canvas.translate((width/2),(hight/2));
canvas.drawArc(rectF,start1,30,true,paint1);
canvas.drawArc(rectF,start2,30,true,paint2);
canvas.drawArc(rectF,start3,30,true,paint3);
}
@Override
public void run() {
while (true){
start1+=1;
start2=start1+120;
start3=start2+120;
postInvalidate();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

本文介绍了Android View的14个周期,包括onFinishInflate()、onMeasure()等。涵盖了从子控件映射成xml、确定子元素大小位置,到按键、触屏、焦点变化等不同情况下触发的周期,还提及附着和离开窗口以及窗口可见性变化时的周期。
587

被折叠的 条评论
为什么被折叠?



