Android提供了强大的可复用组件,但特殊情况需要自己的自定义的View组件,下面自定义一个View。
首先在values/attrs.xml中定义好自定义的View会有哪些属性需要在XML中配置:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
//在attrs中定义background
<attr name="imgBackground" format="integer" />
<attr name="textPaddingLeft" format="dimension"/>
<attr name="textPaddingTop" format="dimension"/>
</declare-styleable>
</resources>
编写自定义的View-MyView.java,继承View
package test.cuntomizedview;
import java.util.Calendar;
import test.cuntomizedview.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
private Paint mPaint;
private Context mContext;
private String mStr;
/*如果需要在配置文件中使用该自定义组件,注意一定要重写public **View(Context context, AttributeSet attrs)的构造方法,而不是public **View(Context context)。如果只需要在程序中利用代码使用该组件可以只覆写public **View(Context context)*/
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initMyView();
/*获取在xml中配置的属性值*/
TypedArray params = context.obtainStyledAttributes(attrs,
R.styleable.MyView);
//取得background
int backgroudId = params.getResourceId(
R.styleable.MyView_imgBackground, 0);
if (backgroudId != 0)
setBackgroundResource(backgroudId);
int textColor = params.getColor(R.styleable.MyView_textColor,
0XFFFFFFFF);
setTextColor(textColor);
float textSize = params.getDimension(R.styleable.MyView_textSize, 36);
setTextSize(textSize);
float paddingLeft = params.getDimension(
R.styleable.MyView_textPaddingLeft, 41);
float paddingTop = params.getDimension(
R.styleable.MyView_textPaddingTop, 21);
setPaddings(paddingLeft, paddingTop);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mStr != null) {
canvas.drawText(mStr, 0, 0, mPaint);
}
canvas.drawText("heiheihei", 30, 60, mPaint);
}
private void initMyView() {
mPaint = new Paint();
mPaint.setColor(Color.WHITE);
}
private void setTextColor(int textColor) {
mPaint.setColor(0XFFAABBCC);
}
private void setTextSize(float textSize) {
mPaint.setTextSize(textSize);
}
private void setPaddings(float paddingLeft, float paddingTop) {
setPadding((int)paddingLeft, (int)paddingTop, 0, 0);
}
}
// 注意怎样在attrs中怎样定义background并取得background。
在layout中使用MyView,
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/test.cuntomizedview"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<test.cuntomizedview.MyView android:id="@+id/v"
android:layout_width="fill_parent" android:layout_height="fill_parent"
app:textColor="#FFFFFFFF" app:textSize="40dip"
app:textPaddingLeft="40dip" app:textPaddingTop="40dip"
app:imgBackground="@drawable/bg_time"
/>
</LinearLayout>
分享到:
相关推荐
在Android开发中,自定义View组件是提升应用界面独特性和功能扩展性的重要手段。自定义View允许开发者根据项目需求创建个性化的UI元素,或者实现一些系统原生组件无法满足的功能。下面将详细介绍自定义View的基本...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和...通过阅读提供的博客和源码,开发者可以学习到如何从头构建一个功能完备、性能良好的自定义View组件。
标题提到的"安卓Android 排班自定义view 支持左右上下滑动 支持点击事件,支持更改每个框的内容",这是一个专为排班场景设计的自定义View组件,它具有高度的可定制性和交互性。 首先,这个自定义View能够实现左右...
理解并熟练掌握`AttributeSet`和`TypedArray`的使用,能帮助我们编写出更加灵活和可定制的自定义View组件。 通过学习和实践,你可以创建出具有各种复杂交互和视觉效果的自定义View,提升应用程序的质量和用户体验。...
此外,可以创建可复用的自定义View组件,如自定义进度条、按钮等,以提高代码的可维护性和可扩展性。 7. **属性动画与数据绑定**:结合Android的Data Binding库,可以实现视图状态与数据模型的双向绑定,让自定义...
本文将围绕“Android自定义view案例一气泡框”展开,介绍如何实现一个类似气泡形状的自定义View组件,并提供相关的实践步骤。 首先,自定义View的基本步骤包括创建一个新的Java类,继承自Android的View或其子类,如...
微信小程序自定义组件是一种封装了特定功能或界面的代码模块,可以像内置组件(如`view`、`button`等)一样在页面中使用。通过自定义组件,开发者可以将复杂的功能或者常见的设计模式抽象出来,便于在多个地方重复...
2. 自定义View组件 - 继承View或ViewGroup:自定义组件通常从View或ViewGroup类派生,前者负责基本的绘图操作,后者处理子视图的布局和交互。 - onDraw()方法:这是自定义组件的核心,用于执行绘图逻辑。在这里,...
### Android自定义View详解 #### 一、引言 在Android开发中,自定义View是一项...通过这些步骤,开发者可以创建出既美观又实用的自定义View组件。未来,随着更多复杂需求的出现,自定义View的应用场景将会更加广泛。
1. **自定义View类** 自定义时钟组件通常基于Android的`View`或`ViewGroup`类进行扩展。在这个例子中,`MyAnalogClock`可能是一个继承自`View`的类,它重写了`onDraw()`方法来绘制时钟的各个部分,如时针、分针和...
本文将深入解析TimePicker组件,并介绍如何进行自定义,以满足更加个性化的应用需求。 首先,我们来了解TimePicker的基本用法。在Android SDK中,TimePicker分为两种模式:数字时钟(digital)和模拟时钟(analog)...
8. **自定义View的最佳实践**:遵循良好的编程习惯,如封装好可复用的组件,编写清晰的注释,以及进行充分的测试,将有助于提高代码质量和维护性。 9. **案例分析**:在"gameView"这个文件名中,我们可以推测可能...
- **复用现有View**:有时可以通过组合和定制现有的View组件,而不是从头开始创建新的View,以实现更高效和可维护的代码。 - **触摸事件分发**:理解事件分发链,如何在自定义View中拦截和处理事件,以及如何处理...
1. **自定义View的基本原理** 自定义组件通常从`View`或`ViewGroup`派生。首先,你需要创建一个新的Java类,继承自`View`或`ViewGroup`。`View`是基本的UI元素,而`ViewGroup`用于管理多个子视图,相当于布局容器。...
自定义View允许开发者根据需求创建独特的用户界面组件,而自定义Button则是在此基础上更进一步,专注于按钮这一常见的交互元素。本文将深入探讨这两个主题,并提供实践案例。 **一、自定义View** 自定义View是...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。"自定义组合View"通常指...理解以上知识点并灵活运用,将有助于你创建出高效、美观且功能强大的自定义View组件。
在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。自定义View通常涉及到绘制、事件处理、动画以及性能优化等多个方面。下面我们将...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。本项目"Android 自定义View实现水平温度计"就是这样一个实例,它通过自定义View来展示一个水平方向的温度计,...
在Android开发中,自定义View是一项常见的任务,它允许开发者根据特定需求创建独特且功能丰富的UI组件。然而,在实现自定义View时,我们可能会遇到一些冲突问题,这可能源于多种原因,如重名、资源ID冲突、布局管理...
自定义View允许开发者创建自己的视图组件,以满足特定的需求或提供独特的用户交互体验。自定义View通常涉及到以下几个步骤: 1. **创建新类**:首先,你需要继承一个已有的View类,如`View`、`TextView`或`...