自定义View(三)——继承ViewGroup实例

1.案例打造过程

1)建立该组件的布局(title.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FF3399">
      <Button
          android:id="@+id/back"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_margin="5dp"
          android:background="@mipmap/ic_launcher"
          />
     <TextView
         android:id="@+id/text"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:gravity="center"
         android:text="微信"
         android:textColor="#fff"
         android:textSize="24sp"/>
     <Button
         android:id="@+id/title"
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:layout_margin="5dp"
         android:background="@mipmap/ic_launcher"
         android:text="Edit"
         android:textColor="#fff"
         />
</LinearLayout>

2)书写自定义view

package com.example.zidingyi;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * Created by 刘鹏达 on 2017/9/12.
 */

public class TitleLayout extends LinearLayout{
    public TitleLayout(Context context, AttributeSet attributeSet){
        super(context,attributeSet);
        LayoutInflater.from(context).inflate(R.layout.title,this);
        Button button1=(Button)findViewById(R.id.back);
        Button button2=(Button)findViewById(R.id.title);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((Activity)getContext()).finish();
            }
        });
        button2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),"You clicked Edit button",Toast.LENGTH_SHORT).show();;
            }
        });

    }
}

3)引用该组件

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <com.example.zidingyi.TitleLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
</LinearLayout>

activity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //setContentView(new MyView(this);这个方法也可以实现显示自定义组件,其是利用了自定义组件的组件构造函数
    }
}

效果图:

总结:

继承viewgroup一般是需要多个组件重组的情况,所以一般需要书写一个布局,然后引用这个布局。

 

时间: 2024-10-15 12:56:54

自定义View(三)——继承ViewGroup实例的相关文章

自定义View(二)--继承自ViewGroup

自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Demo中自定义了一个布局的效果,并且这个自定义布局中包含布局自己的属性,布局中的控件也包含只属于这个布局才具有的自定义属性(类似于layout_weight只存在于LinearLayout中,只有LinearLayout中的控件可以使用一样).话不多说,先看效果图: 其中红色的部分是自定义的ViewGr

Android 自定义View (三)

人的一生就像一篇文章,只有经过多次精心修改,才能不断完善. 本讲内容:ColorFilter 颜色过滤类(继上一讲进一步深入了解自定义View) 上一讲我们讲解了ColorMatrixColorFilter类 一.LightingColorFilter光照颜色过滤类(该类有且只有一个构造方法:) LightingColorFilter (int mul, int add) mul全称是colorMultiply意为色彩倍增,add全称是colorAdd意为色彩添加,这两个值都是16进制的色彩值0

Android 自定义View (三) 圆环交替 等待效果

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24500107 一个朋友今天有这么个需求(下图),我觉得那自定义View来做还是很适合的,就做了下,顺便和大家分享下,对于自定义View多练没坏处么.如果你看了前两篇,那么这篇一定so easy . 效果就这样,分析了一下,大概有这几个属性,两个颜色,一个速度,一个圆环的宽度. 还是我们自定View的那几个步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义

回顾自定义view三个构造函数

public class MyCustomView extends View { //第一个构造函数 public MyCustomView(Context context) { this(context, null); } //第二个构造函数 public MyCustomView(Context context, AttributeSet attrs) { this(context, attrs, 0); } //第三个构造函数 public MyCustomView(Context con

自定义view实现阻尼效果的加载动画

效果: > 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又称减幅振动.衰减振动.[1] 不论是弹簧振子还是单摆由于外界的摩擦和介质阻力总是存在,在振动过程中要不断克服外界阻力做功,消耗能量,振幅就会逐渐减小,经过一段时间,振动就会完全停下来.这种振幅随时间减小的振动称为阻尼振动.因为振幅与振动的能量有关,阻尼振动也就是能量不断减少的振动.阻尼振动是非简

自定义View控件(2—手写实例代码)

1. 步骤: + 1.自定义一个类继承于UIView + 2.在initWithFrame方法中添加子控件 + 3.在layoutSubviews中设置子控件的位置 + 4.提供一个属性保存外界传入的数据(模型对象), 重写setter方法设置子控件的数据 - 类工厂方法(便利构造器) + 按照苹果的风格和规范, 一般情况一个用于创建对象的对象方法会对应一个类方法 + 可以通过类工厂方法, 快速的根据数据创建一个对象 - 注意点: + 返回值一定要使用instancetype, 不要使用id +

android 自定义View过程解析

PS:本篇文章大多数翻译自github上一篇英文文章! 总所周知,安卓UI是基于View(屏幕上的单一节点)和ViewGroup(屏幕上节点的集合),在android中有很多widgets和layouts可以用于创建UI界面,比如最常见的View有Button,TextView等等,而最常见的布局也有RelativeLayout,LinearLayout等. 在一些应用中我们不得不自定义View去满足我们的需求,自定义View可以继承一个View或者已存在的子类去创建我们自己的自定义View,甚

Android自定义View之仿QQ侧滑菜单实现

最近,由于正在做的一个应用中要用到侧滑菜单,所以通过查资料看视频,学习了一下自定义View,实现一个类似于QQ的侧滑菜单,顺便还将其封装为自定义组件,可以实现类似QQ的侧滑菜单和抽屉式侧滑菜单两种菜单. 下面先放上效果图: 我们这里的侧滑菜单主要是利用HorizontalScrollView来实现的,基本的思路是,一个布局中左边是菜单布局,右边是内容布局,默认情况下,菜单布局隐藏,内容布局显示,当我们向右侧滑,就会将菜单拉出来,而将内容布局的一部分隐藏,如下图所示: 下面我们就一步步开始实现一个

128、View 绘制流程 &amp; 自定义View

记清楚函数调用的顺序才能准确地进行调用. 根据调用链,可将整个绘制过程分为三部分:Measure - Layout - Draw Measure 过程 1. 测量过程由上至下,在measure过程的最后,每个视图将存储自己的尺寸大小和测量规格. 2. measure过程会为一个View及其所有子节点的mMeasureWidth和mMeasuredHeight变量赋值, 该值可以通过getMeasuredWidth和getMeasuredHeight方法获得. 3. measure过程的核心方法: