欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【达内课程】自定义控件

程序员文章站 2022-06-07 13:41:50
...

原生,开源,自定义控件

CustomView

//继承View或View的子类,就是自定义控件
public class CustomView extends View {
    int viewHeight;
    int viewWidth;

    //AttributeSet对应布局中的属性
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    //得到控件大小
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        viewWidth = w;
        viewHeight = h;
        super.onSizeChanged(w, h, oldw, oldh);
    }

    //canvas画文字,图形
    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);

        Rect rect = new Rect(0,0,viewWidth,viewHeight);
        canvas.drawRect(rect,paint);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

}

MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

activity_main

<com.xx.myapplication.CustomView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

第一次执行流程
MainActivity中onCreate中的setContentView执行后
执行自定义控件的构造方法
onSizeChanged
onDraw
如果单击,触发onTouchEvent

如果横竖屏发生变化
会重新执行MainActivity的onCreate
执行自定义控件的构造方法
onSizeChanged
onDraw

如果AndroidManifest中设置configChanges

android:configChanges="orientation|screenSize|keyboardHidden"

再次执行程序,第一次执行流程还是相同的
如果横竖屏发生变化,会直接再次执行
onSizeChanged
onDraw

相关标签: 自定义控件