Android自定义View:组合、自绘与继承控件解析
108 浏览量
更新于2024-08-29
收藏 102KB PDF 举报
本文主要介绍了Android自定义View的三种实现方式,包括组合控件、自绘控件和继承控件。作者在完成毕设项目的过程中,深入研究了自定义控件,并参考了郭霖大神的博客内容。文章首先通过创建一个简单的组合控件——自定义标题栏来阐述组合控件的实现方法。
(一)组合控件
组合控件是通过将已有的系统控件进行组合,形成新的具有特定功能的控件。例如,常见的标题栏通常由一个TextView和一个或多个Button组成。在创建自定义标题栏时,可以编写一个名为`title_bar.xml`的布局文件,包含一个Button作为返回按钮和一个TextView显示标题。布局文件中使用RelativeLayout作为容器,将Button和TextView按照设计需求进行相对定位,如设置居中对齐和边缘间距。
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0000ff">
<Button
android:id="@+id/left_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@drawable/back1_64" />
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="这是标题"
android:textColor="#ffffff"
android:textSize="20sp" />
</RelativeLayout>
```
接下来,我们可以在Activity中通过加载这个布局并获取对应的视图组件来使用自定义标题栏:
```java
View titleBar = LayoutInflater.from(this).inflate(R.layout.title_bar, null);
Button leftBtn = (Button) titleBar.findViewById(R.id.left_btn);
TextView titleTv = (TextView) titleBar.findViewById(R.id.title_tv);
// 设置回调或者属性
leftBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 处理返回操作
}
});
// ...
setSupportActionBar(titleBar); // 如果是ActionBar
```
(二)自绘控件
自绘控件是指通过重写`onDraw()`方法,利用Canvas进行图形绘制,实现高度定制的控件。例如,你可能想要创建一个圆形的Button,这时可以创建一个自定义View类,继承自View,并在`onDraw()`方法中画出圆形。
```java
public class CircleButton extends View {
private Paint paint;
public CircleButton(Context context) {
super(context);
init();
}
public CircleButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLUE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int radius = Math.min(width, height) / 2;
canvas.drawCircle(width / 2, height / 2, radius, paint);
}
}
```
(三)继承控件
继承控件是在现有控件的基础上进行扩展,增加新的属性和方法。例如,如果要创建一个具有额外功能的TextView,可以继承自TextView类,并添加新的方法或属性。这种方式适用于需要在原有控件基础上添加特定逻辑的情况。
```java
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
// 添加自定义方法
public void customizeText(String text) {
// 添加定制文本处理逻辑
}
}
```
总结
自定义View在Android开发中扮演着重要的角色,它使得开发者能够根据项目的特定需求创建独特的界面元素。组合控件适用于简单地组合已有控件,自绘控件适合于实现复杂的图形绘制,而继承控件则是在现有控件基础上添加新功能。熟练掌握这三种方式,能极大提升Android开发的灵活性和可定制性。
2019-01-25 上传
2021-01-04 上传
2020-08-30 上传
2012-11-07 上传
2020-09-03 上传
2021-01-04 上传
2021-01-04 上传
weixin_38518668
- 粉丝: 4
- 资源: 984
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍