安卓开发:继承View实现自定义View
来源:互联网 发布:winpe 网络组件 编辑:程序博客网 时间:2024/06/05 19:05
Android非常开源,实现自定义View有很多种方法。继承View类就是其中之一。
继承View类需要实现构造函数super.()方法。其中super()方法有三个重载方法。分别是MyView(Context context)、MyView(Context context, AttributeSet attrs)和MyView(Context context, AttributeSet attrs, int defStyleAttr)。我们分别讲述一下三个重载方法的区别。
1、MyView(Context context)
该方法可以在MainActivity中直接使用。比如说mainActivity.setContentView(new MyView(this));但是不能在xml中使用。
2、MyView(Context context, AttributeSet attrs)
该方法可以让我们自定义的MyView类在xml中设置属性,比如说长、宽等。
3、MyView(Context context, AttributeSet attrs, int defStyleAttr)
该方法意味着MyView类不仅能在xml中设置属性,还能使用attrs.xml等资源文件。
做了一个简单的MyView例子:
我们新建MyView类:
package com.example.aiden.myapplication;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.view.View;/** * Created by Aiden on 2016/3/11. */public class MyView extends View implements View.OnClickListener { private int time; // 记录点击的次数 private Paint paint; // 画笔 private Rect rect; // 矩形对象 public MyView(Context context, AttributeSet attrs) { super(context, attrs); this.paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 设置画笔锯齿 this.rect = new Rect(); this.time = 0; } @Override public void onDraw(Canvas canvas) { // canvas相当于是画布,可以通过画笔在上面绘制 super.onDraw(canvas); paint.setColor(Color.BLUE); // 将这个View设置为矩形 canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), paint); paint.setColor(Color.BLACK); paint.setTextSize(300); // 将内容绘制到rect对象上,用于得到长度和宽度 paint.getTextBounds(time + "", 0, (time + "").length(), rect); // 画笔设置文字水平居中 paint.setTextAlign(Paint.Align.CENTER); Paint.FontMetrics metrics = paint.getFontMetrics(); // 得到文字高度 float fontHeight = metrics.bottom - metrics.top; // 得到垂直的位置 float y = this.getHeight() - (this.getHeight() - fontHeight) / 2 - metrics.bottom; float x = this.getWidth() / 2; canvas.drawText(time + "", x, y, paint); this.setOnClickListener(this); } @Override public void onClick(View v) { time++; // 刷新布局,相当于调用了onDraw(Canvas canvas)函数 this.invalidate(); }}
在activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.aiden.myapplication.MyView android:layout_width="200dp" android:layout_height="200dp" /></LinearLayout>
MainActivity中就没什么好写的了。就是this.setContentView(R.layout.activity_main);
1 0
- 安卓开发:继承View实现自定义View
- 安卓开发:组合View实现自定义View
- 安卓开发自定义View
- 安卓开发28:自定义View类
- 安卓开发自定义view初体验
- [安卓开发] 自定义View之一: 组合View
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View
- 安卓自定义View
- 安卓自定义view
- 自定义View实现安卓裁剪图片
- 安卓自定义View实现钟表
- 安卓自定义View实现钟表
- 安卓之自定义view实现索引
- 安卓自定义View实现课程表
- 自定义View继承view
- 自定义View---继承View
- FTP服务器的安装,配置,虚拟用户的创建
- 在Linux CentOS 6.5上安装python2.7.9
- Huge Page 是否是拯救性能的万能良药?
- 代码重构思考
- B. Making a String【水题】
- 安卓开发:继承View实现自定义View
- mysql root密码
- 专业人士解读:为什么在中国“公有云”落地那么难?
- Android studio -VSN 使用笔记
- 242. Valid Anagram
- Java基础操作(一){DOS打开方式、DOS的命令简单操作}
- POJ 1236 Network of Schools 强连通分量
- C++ exceptional Maximally Reusable Generic Containers
- PHP学习(七)--分支结构