自定义组合控件 圆环 ring

说明

可以设置内部填充或不填充

可以社会中边框颜色


View


public class MyRingView extends RelativeLayout {

    private Context mContext;

    private ImageView iv_circle;

    private ImageView iv_solid;

    public MyRingView(Context context) {

        super(context);

        initView(context);

    }

    public MyRingView(Context context, AttributeSet attrs) {

        super(context, attrs);

        initView(context);

    }

    public MyRingView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

        initView(context);

    }

    private void initView(Context context) {

        mContext = context;

        inflate(mContext, R.layout.view, this);

        iv_circle = (ImageView) findViewById(R.id.iv_circle);

        iv_solid = (ImageView) findViewById(R.id.iv_solid);

    }

    /**

     * @param color 颜色

     * @param isSolid  内部是否填充

     */

    public void setStyle(int color, boolean isSolid) {

        ((GradientDrawable) iv_circle.getBackground()).setStroke(2, color);//圆环的颜色

        if (isSolid) {

            ((GradientDrawable) iv_solid.getBackground()).setColor(color);//指定内部圆的背景色

            ((GradientDrawable) iv_solid.getBackground()).setStroke(0, color);//内部圆无描边,必须显示设为0

        } else {

            ((GradientDrawable) iv_solid.getBackground()).setColor(0xffffffff);//内部圆的背景是白色的

            ((GradientDrawable) iv_solid.getBackground()).setStroke(2, color);//内部圆有描边

        }

    }

}

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="wrap_content"     android:layout_height="wrap_content" >     <ImageView         android:id="@+id/iv_circle"         android:layout_width="15dp"         android:layout_height="15dp"         android:layout_centerInParent="true"         android:background="@drawable/ring"         android:src="#0000" />     <ImageView         android:id="@+id/iv_solid"         android:layout_width="10dp"         android:layout_height="10dp"         android:layout_centerInParent="true"         android:background="@drawable/solid"         android:src="#0000" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:innerRadius="4.5dp"     android:shape="ring"     android:thickness="2dp"     android:useLevel="false" >     <solid android:color="#fff" />     <stroke         android:width="0.5dp"         android:color="#ffa726" /> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="oval" >     <solid android:color="#00f" /> </shape>

使用


public class MainActivity extends Activity {

    private MyRingView[] views = new MyRingView[4];

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        views[0] = (MyRingView) findViewById(R.id.item1);

        views[1] = (MyRingView) findViewById(R.id.item2);

        views[2] = (MyRingView) findViewById(R.id.item3);

        views[3] = (MyRingView) findViewById(R.id.item4);

        views[0].setStyle(0xff666666, false);

        views[1].setStyle(0xff00b0ff, true);

        views[2].setStyle(0xffffa726, false);

        views[3].setStyle(0xffff1744, true);

    }

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="#fff"     android:orientation="horizontal"     android:padding="5dp" >     <com.bqt.shape53.MyRingView         android:id="@+id/item1"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="40dp" />     <com.bqt.shape53.MyRingView         android:id="@+id/item2"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="40dp" />     <com.bqt.shape53.MyRingView         android:id="@+id/item3"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="40dp" />     <com.bqt.shape53.MyRingView         android:id="@+id/item4"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="40dp" /> </LinearLayout>

来自为知笔记(Wiz)

时间: 2024-11-08 17:09:46

自定义组合控件 圆环 ring的相关文章

Android自定义控件之自定义组合控件(三)

前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发成本,以及维护成本. 使用自定义组合控件的好处? 我们在项目开发中经常会遇见很多相似或者相同的布局,比如APP的标题栏,我们从三种方式实现标题栏来对比自定义组件带来的好处,毕竟好的东西还是以提高开发效率,降低开发成本为导向的. 1.)第一种方式:直接在每个xml布局中写相同的标题栏布局代码 <?xm

自定义组合控件和在自定义控件中使用自定义属性

今天,整理了一下我平时的笔记,写一个比较简单的自定义组合控件,仅供小白参考,大神请绕道,希望能够对大家有一些帮助 首先,得明白为什么我们需要自定义组合控件,它是因为原有控件并不能满足开发的需求,或者说并不能达到我们想要的一种效果,这个时候,就需要我们自己定义一些控件,以达到目的 ![先来看一下效果](http://img.blog.csdn.net/20160716224219109) 个人总结自定义控件的步骤: 1.先写一个布局,这里我用的是一个相对布局,我这里的相对布局就是根布局了 <?xm

Android自定义组合控件--底部多按钮切换

效果图: 现在市场上大多数软件都是类似于上面的结构,底部有几个按钮用于切换到不同的界面.基于OOP思想,我想把下面的一整块布局封装成一个类,也就是我们的自定义组合控件-底部多按钮切换布局,我把它叫做BottomLayout 看上面的布局,几个按钮横向排列,我们先看一下布局 最外面LinearLayout 方向 horizontal,然后5个weight相同的RelativeLayout,每个RelativeLayout里面有一个Button(用了显示选中状态)个ImageView(用来显示红点)

Android实例-手机安全卫士(七)-自定义组合控件

一.目标. 将多个系统控件(TextView.Button.CheckBox等)组合成一个自定义的控件,并像系统控件一样使用.如图所示第1个自动更新控件是根据相对布局放置而成的,第2个自动更新控件即为自定义组合控件,它可以想一般的TextView等系统控件一样重复使用. 自定义控件如图: 二.代码实现. 1.在layout文件夹下新建一个xml文件(取名model_setting_item.xml),用于保存自定义控件的布局. 2.在新建的xml文件(model_setting_item.xml

Android开发学习笔记-自定义组合控件的过程

自定义组合控件的过程 1.自定义一个View 一般来说,继承相对布局,或者线性布局 ViewGroup:2.实现父类的构造方法.一般来说,需要在构造方法里初始化自定义的布局文件:3.根据一些需要或者需求,定义一些API方法: ----------------------------------4.根据需要,自定义控件的属性,可以参照TextView属性: 5.自定义命名空间,例如: xmlns:itheima="http://schemas.android.com/apk/res/<包名&

自定义组合控件,适配器原理-Day31

自定义组合控件,适配器原理-Day31 mobile2.1 主页定义 手机上锁功能 1.弹出设置密码框. 手机下载进度 自定定义控件 控件的属性其实就是控件类一个属性设置属性调用类的set方法方法, 自定义组合控件的思路 生命一个View对象继承自相对布局,线性布局或者其他的ViewGroup 在View对象重写构造方法,然后初始化布局,通过View.inflate()方法把我们自己定义的布局挂到界面当中. 自定义属性在res/values目录下创建attrs.xml里面定义一些属性, <res

android 自定义组合控件

自定义控件是一些android程序员感觉很难攻破的难点,起码对我来说是这样的,但是我们可以在网上找一些好的博客关于自定义控件好好拿过来学习研究下,多练,多写点也能找到感觉,把一些原理弄懂,今天就讲下自定义组合控件,这个特别适合在标题栏或者设置界面,看下面图: 就非常适合使用组合控件了,现在写一个玩玩: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android自定义组合控件--图片加文字,类似视频播放软件的列表

分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性; 3,自定义继承组合布局的class类,实现带两参数的构造器; 4,在xml中展示组合控件. 具体实现过程: 一.组合控件的xml 我接触的有两种方式,一种是普通的Activity的xml:一种是父节点为merge的xml.我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层. 我写的 custom_pictext.xml <?xml version="1.0" encoding="u

Android 自定义组合控件小结

引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控件组成一个功能完整组合控件并将其封装为面向对象的类,而并非讨论如何继承自SDK提供的控件类(比如TextView),对其进行自定义扩展的问题. 进入正题前,我们先来看一组功能需求 假设在手机需求上,那么如上三个界面我们可以使用三个Activity,每个Activity一个布局文件,实现起来比较独立,但是假设在Android pad上要