使用

可以设置内部填充样式及大小
可以设置边框颜色及宽度
这里只是介绍了其中一种实现方式,其实这种类型的东西完全可以用自定义View去实现,他就是一个空中的大圆+一个空中或实心的小圆,实现起来也是非常容易的。

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>


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);//内部圆有描边
        }
    }
}

View资源

<?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>


组合控件 圆环 ring的更多相关文章

  1. Android自定义控件View(三)组合控件

    不少人应该见过小米手机系统音量控制UI,一个圆形带动画效果的音量加减UI,效果很好看.它是怎么实现的呢?这篇博客来揭开它的神秘面纱.先上效果图 相信很多人都知道Android自定义控件的三种方式,An ...

  2. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  3. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  4. Andriod 自定义控件之创建可以复用的组合控件

    前面已学习了一种自定义控件的实现,是Andriod 自定义控件之音频条,还没学习的同学可以学习下,学习了的同学也要去温习下,一定要自己完全的掌握了,再继续学习,贪多嚼不烂可不是好的学习方法,我们争取学 ...

  5. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  6. 【转】android UI进阶之自定义组合控件

    [源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...

  7. android 组合控件接收不到点击事件的问题

    android点击事件的传播是有子控件传给父控件,如果子控件处理过了,父控件不再处理,所以要想让组合控件接收点击事件,必须屏蔽子控件的点击事件. 设置组合控件的clickable和focusable属 ...

  8. Android开发之自定义组合控件

    自定义组合控件的步骤1.自定义一个View,继承ViewGroup,比如RelativeLayout2.编写组合控件的布局文件,在自定义的view中加载(使用View.inflate())3.自定义属 ...

  9. Android自定义组合控件

    今天和大家分享下组合控件的使用.很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便 ...

随机推荐

  1. iOS使用VLC

    简       注册登录 添加关注 作者 牵线小丑2016.03.18 10:42 写了4836字,被38人关注,获得了43个喜欢 iOS使用VLC 字数946 阅读698 评论1 喜欢14 简介 库 ...

  2. 从零开始学Sketch——入门篇-b

    如果你是一枚交互设计师或者UI设计师,那么你一定知道Sketch这个强大的矢量设计软件:如果你用过Photoshop,那么在你接触了Sketch之后就能了解到这款产品相对于PS的优点,说不定会跟我一样 ...

  3. Fireworks Extension —— AutoSlice 介绍

    前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...

  4. 转:CodeCube提供可共享、可运行的代码示例

    CodeCube是一个新服务和开源项目,旨在让开发者能够通过浏览器以一种安全的方式分享并运行代码示例从而提升协作. 最初发布的服务可以从codecube.io上获取,支持Ruby.Python.Go及 ...

  5. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  6. handler.post(r)同一个线程的疑惑

    handler.post(r);是把r加到消息队列,但并未开辟新线程.等到消息被取出时才执行. package com.lei.handlethread; import android.os.Bund ...

  7. sphinx coreseek SetSortMode(SPH_SORT_ATTR_ASC, '') 对float 排序设置bug

    when I use SetSortMode(SPH_SORT_ATTR_ASC, 'floatVar'), it works unexpectedly. for example, I have a ...

  8. appendGrid的使用

    新的项目中需要使用类似appendGrid的控件,当然开始时是不知道这个控件的,开始是想做成如下这样 这其实是Bugfree的搜索栏,并且我也说不好我要做的这个东西应该叫什么,大体可以说是动态的添加或 ...

  9. 前端工程师和web工程师的差异

    摘自园内一篇文章关于web工程师的思考,比较认同其中的一些观点 前端工程师知识结构:               精通: xhtml,css,JavaScript       熟悉:一种后端程序语言( ...

  10. linux下svn修改用户名和密码

    1.临时更换,在命令下强制加上 --username 和--password选项, 例如:svn up --username zhangsan --password 123456 svn co URL ...