`
scliu0718
  • 浏览: 52320 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Android自定义View

 
阅读更多

Android中自定义View可以分两种,一种为使用系统提供View来拼成一个想要的View(比如在程序中多次出现同样的view,可以共用,相当于封装吧),另一种为自己直接使用Paint画。
本文是属于第一种,大概可分4个步骤,如果不需要自定义标签属性第一步则可跳过。
代码如下:

1. 写一个attrs:(如果不需要自定义属性则不需要)
 
    <declare-styleable name="MyLayoutView">
        <attr format="reference" name="tile" />
        <attr format="reference" name="tittle" />
        <attr format="reference" name="content" />
    </declare-styleable>

2. layout布局(my_layout.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical">
  
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical" >
  
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/my_tile"
                android:layout_marginLeft="15dip"
                android:orientation="vertical" >
  
                 <TextView
                     android:id="@+id/my_tittle"
                    style="@style/T7_2_Subhead"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dip"
                    android:includeFontPadding="false"
                    android:text="" />
  
                 <TextView
                    android:id="@+id/my_description"
                    style="@style/T7_5_Bodycopy"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false" />
            </LinearLayout>
  
            <TextView
                android:id="@+id/my_tile"
                android:layout_width="200dip"
                android:layout_height="200dip"
                android:layout_alignParentRight="true"
                android:scaleType="fitXY" />
        </RelativeLayout>
    </LinearLayout>

3. 编写MyLayoutView:
packge com.a.b;
public class MyLayoutView extends LinearLayout {
    private int tile;
    private int tittle;
    private int content;
    private ImageView tileView;
    private TextView tittleView;
    private TextView contentView;
    private View view;
  
    public MyLayoutView(Context context) {
        super(context);
    }
  
    public MyLayoutView(Context context, AttributeSet attrs) {
        super(context, attrs);
  
        TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.MyLayoutView);
        tile =  array.getResourceId(R.styleable.MyLayoutView_tile, -1);
        tittle = array.getResourceId(R.styleable.MyLayoutView_tittle, -1);
        content = array.getResourceId(R.styleable.MyLayoutView_content, -1);
  
        LayoutInflater inflater = LayoutInflater.from(context);
        this.view = inflater.inflate(R.layout.my_layout, null);
  
        tileView = (ImageView) view.findViewById(R.id.my_tile);
        tittleView = (TextView) view.findViewById(R.id.my_tittle);
        contentView = (TextView) view.findViewById(R.id.my_description);
    }
      
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        this.initialize();
    }
  
    private void initialize() {
  
        tileView.setImageResource(tile);
        tittleView.setText(tittle);
        contentView.setText(content);
  
        LinearLayout.LayoutParams activityParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        this.removeView(this.view);
        this.addView(this.view, activityParams);
    }
}
  


4. 使用:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:my="http://schemas.android.com/apk/res/com.a.b"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
  
         <com.a.b.MyLayoutView
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           my:content="@string/my_summary1"
           my:tile="@drawablemy_one_image"
           my:tittle="@string/my_tittle1" />
  
</RelativeLayout>


分享到:
评论

相关推荐

    BookPage-Android自定义View实现翻页效果,并附带实现教程.zip

    仿真书籍翻页效果BookPageView简介:实现了仿真翻页效果,教程完整地描述了翻页原理分析到性能优化的过程教程博客:Android自定义View——从零开始实现书籍翻页效果(一) Android自定义View——从零开始实现书籍...

    android 自定义view比较综合的例子

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。这个“android 自定义view比较综合的例子”显然涵盖了多个高级话题,旨在帮助有一定基础的开发者提升自定义...

    Android自定义View实现转盘旋转的效果

    Android 自定义 View 实现转盘旋转的效果 Android 的自定义 View 为开发者定义和使用个性化的 View 提供了很好的支持,想要使用自己定义的 View,需要继承 View 类,并重写构造函数和 onDraw() 函数。onDraw 函数...

    Android 自定义View实现水平温度计

    总的来说,这个项目涵盖了Android自定义View的基本流程,以及图形绘制、颜色处理、动态更新等核心知识点,是学习Android自定义组件的一个良好实践。通过学习和研究,开发者不仅可以掌握自定义View的开发技巧,还能...

    android 自定义View界面大合集

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。"Android 自定义View界面大合集"的主题涵盖了这个领域的广泛知识点,包括但不限于...

    android自定义View(五)打造自己的遥控器菜单

    这个过程涉及到了Android自定义View的基本原理,包括绘图、触摸事件处理、动画和布局管理等。了解并掌握这些知识,对于提升Android应用的用户体验具有重要意义。想要了解更多关于Android自定义View的内容,可以访问...

    Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View

    方便调用,有示例。 Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View。kotlin编写的一个自定义View。

    Android 自定义view模板并实现点击事件的回调

    总结来说,创建Android自定义View模板并实现点击事件的回调,主要包括以下步骤: 1. 定义XML资源文件(如attrs.xml),声明自定义属性。 2. 创建自定义View类,继承自适当的父View类,如`RelativeLayout`。 3. 在...

    Android 自定义view 大合集源码

    在Android开发中,自定义View是一项重要的技能,它允许开发者突破系统提供的标准组件限制,创造出独特且富有创意的用户界面。本资源“Android 自定义view 大合集源码”由知名开发者雨松MOMO提供,旨在深入探讨并实践...

    Android自定义View-画直线、折线拖动点可移动demo

    Android自定义View,实现画直线、折现,拖动点可以随意移动位置。实现横竖屏切换时,坐标根据分辨率进行转换。

    Android自定义view,实现多画面播放器

    本项目"Android自定义view,实现多画面播放器"就是这样一个实例,它旨在提供一个能够同时展示多个视频流并支持交互操作的视图。 首先,自定义View的基本流程包括: 1. 创建一个新的View类,通常继承自View或已有的...

    【博文源码】Android 自定义 View 基础实例

    本篇博文源码聚焦于Android自定义View的基础实例,旨在帮助开发者掌握自定义View的基本步骤和技巧。 首先,自定义View通常涉及到以下几个关键点: 1. **创建新的View类**:开发者需要继承一个已有的View类,如View...

    Android自定义View实例:深度剖析 水晶/水滴 波浪球 实现步骤详解

    在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有表现力的UI元素,提升用户体验。本文将深度剖析如何实现一个名为“水晶/水滴 波浪球”的自定义View,并通过详细步骤讲解,帮助你掌握...

    Android自定义View的事件分发机制(一)

    在博客文章“Android自定义View的事件分发机制(一)”中,作者jsonnan详细阐述了这些概念,并可能通过实例代码展示了如何在自定义View中实现自定义的事件分发逻辑。通过阅读这篇文章,开发者可以更深入地理解...

    Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    我的Android进阶之旅------&gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能 http://blog.csdn.net/ouyang_peng/article/details/50813419 1、实现歌词同步滚动的功能,即歌曲播放到哪句...

    Android自定义View,View中的原点坐标相关问题

    总结,Android自定义View中的原点坐标问题涉及到视图的测量、布局、绘制和事件处理等多个方面。开发者需要深入理解这些概念,才能灵活地创建满足需求的自定义视图。通过源码学习、使用合适的工具以及不断实践,可以...

    Android自定义View之高仿QQ健康

    本项目"Android自定义View之高仿QQ健康"旨在教你如何模仿流行的QQ健康应用,利用谷歌的Material Design风格来设计自定义界面,提供一个既美观又实用的样式。 首先,我们来了解一下Material Design。它是谷歌推出的...

    Android自定义View高仿抖音潜艇大挑战小游戏.zip

    Android自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View...

    Android自定义View(验证码)

    在Android开发中,自定义View是一项重要的技能,它允许开发者扩展Android系统提供的基本视图组件,以满足项目中独特的需求。本篇文章将深入探讨如何基于鸿洋大神的博客内容,创建一个自定义的验证码View。 验证码的...

    Android 自定义View实现环形带刻度的进度条

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且富有表现力的用户界面。本篇文章将深入探讨如何实现一个环形带刻度的进度条,这个自定义View适用于各种需要展示进度的情况,比如...

Global site tag (gtag.js) - Google Analytics