iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android自定义控件实现简易时间轴(1)
  • 474
分享到

android自定义控件实现简易时间轴(1)

2024-04-02 19:04:59 474人浏览 八月长安
摘要

本文实例为大家分享了Android自定义控件实现简易时间轴的具体代码,供大家参考,具体内容如下 之前项目需要写一个消费记录,类似于时间轴似的控件,自身在自定义控件这里不咋地(&hel

本文实例为大家分享了Android自定义控件实现简易时间轴的具体代码,供大家参考,具体内容如下

之前项目需要写一个消费记录,类似于时间轴似的控件,自身在自定义控件这里不咋地(…),最后搞了一个这个demo

效果图:

这里就是绘制圆和上下两条线

1.资源文件,定义一些基本的属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <attr name="textSize" fORMat="dimension" />
    <attr name="textColor" format="color" />
    <attr name="textTitle" format="string" />
    <attr name="borderColor" format="color" />
    <attr name="borderWidth" format="dimension" />
    <attr name="lineColor" format="color" />
    <attr name="lineWidth" format="dimension" />
    <attr name="bGColor" format="color" />
    <attr name="mRadius" format="dimension"/>
    <declare-styleable name="CustomCicleView">
        <attr name="textSize" />
        <attr name="textColor" />
        <attr name="textTitle" />
        <attr name="lineColor" />
        <attr name="lineWidth" />
        <attr name="bgColor" />
        <attr name="borderColor" />
        <attr name="borderWidth" />
           <attr name="mRadius" />
    </declare-styleable>

</resources>

2.获取属性:

int attr=a.getIndex(i);
        switch (attr) {
            case R.styleable.CustomCicleView_textSize:
                  // 默认设置为16sp,TypeValue也可以把sp转化为px  
                mTextSize = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(  
                        TypedValue.COMPLEX_UNIT_PX, 14, getResources().getDisplayMetrics())); 
                break;
            case R.styleable.CustomCicleView_textColor:
                mTextColor=a.getColor(attr, Color.BLACK);
                break;
            case R.styleable.CustomCicleView_lineWidth:
                mLineWidth= a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(  
                        TypedValue.COMPLEX_UNIT_PX, 2, getResources().getDisplayMetrics()));  
                break;
            case R.styleable.CustomCicleView_lineColor:
                mLineColor=a.getColor(attr, lineColr);
                break;

            case R.styleable.CustomCicleView_borderWidth:
                mBorderWidth= a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(  
                        TypedValue.COMPLEX_UNIT_PX, 2, getResources().getDisplayMetrics()));  
                break;
            case R.styleable.CustomCicleView_borderColor:
                mBorderColor=a.getColor(attr, borderColor);
                break;
            case R.styleable.CustomCicleView_bgColor:
                mBgColor=a.getColor(attr, bgColor);
                break;
            }

这里主要释放资源方便回收:

a.recycle();
//官方api的解释是:给回一个先前的提取的数组,为以后复用,,就是当前的对象回收,下次要用的时候就不用重新再new一个新的对象了,直接从它的回收池里面拿就行。
public void recycle ():
Give back a previously retrieved array, for later re-use

3.重要绘制代码:

 super.onDraw(canvas);
      int centre = getWidth() / 2; // 获取圆心的x坐标
        //半径比较
        int mixWidth=getMeasuredWidth()>getMeasuredHeight()?getMeasuredHeight():getMeasuredWidth();

        mRadius =mRadius>(mixWidth)?(mixWidth):mRadius;

        mBorderWidth =mRadius/2>=(mBorderWidth)?(mBorderWidth):mRadius/10;//最终的效果要不是自己设置的要不就是半径的1/5


        int radius = mRadius/2 - mBorderWidth / 2;// 半径

        mLineHeight=Math.abs(getHeight()/2-radius);//这个地方要判断设置正负

        if(lineLocation!=-1){

            drawLine(canvas,centre);
        }

        //绘制背景
        bgPaint.setColor(Color.parseColor("#00000000"));
        bgPaint.setTextSize(mTextSize);
        canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), bgPaint);

        //绘制圆

        bgPaint.setAntiAlias(true); // 消除锯齿
        bgPaint.setColor(mBgColor);
        bgPaint.setStyle(Paint.Style.FILL); // 设置实心
        canvas.drawCircle(centre, centre, radius, bgPaint);
        //绘制圆环
        borderPaint.setStrokeWidth(mBorderWidth); // 设置圆环的宽度
        borderPaint.setAntiAlias(true); // 消除锯齿
        if (mBorderColor != 0) {
            borderPaint.setColor(mBorderColor);
        } else {
            borderPaint.setColor(borderColor);
        }
        borderPaint.setStyle(Paint.Style.STROKE); // 设置实心
        canvas.drawCircle(centre,centre, radius - mBorderWidth / 2+mLineWidth/2, borderPaint);

        //绘制文本
        bgPaint.setColor(mTextColor);
        textPaint.getTextBounds(mTextTitle, 0, mTextTitle.length(), textRect);
        canvas.drawText(mTextTitle, centre -textRect.width()/2, centre  + textRect.height() / 2, bgPaint);

这里给了一个int值来判断当前需要绘制那个位置的line;值是0只需绘制 上方line,值是 1只需绘制下方line,值是2同事绘制上下方line,值是-1不需绘制line;这个值由用户使用的时候传递过来这样就可以绘制对应的line

 //0  上方 1  下方 2  上下两个
    private void drawLine(Canvas canvas, float centre) {
        linePaint.setColor(borderColor);
        linePaint.setStrokeWidth(mLineWidth);
        if (lineLocation == 0) {
//          canvas.drawLine(centre, 0.5F*centre-mLineHeight, centre, centre, linePaint); 
            canvas.drawLine(centre, 0, centre, mLineHeight*2, linePaint);
        } else if (lineLocation == 1) {
            canvas.drawLine(centre, centre, centre, centre * 2F + mLineHeight, linePaint);
        } else if (lineLocation == 2) {
//            canvas.drawLine(centre, mRadius * 0.5F - mLineHeight-mBorderWidth, centre, mLineHeight, linePaint);
            canvas.drawLine(centre, 0, centre, mLineHeight*2, linePaint);
            canvas.drawLine(centre, centre, centre, centre * 2F + mLineHeight, linePaint);

        }
    }

4.使用

这里的使用有两种,一种是在xml中直接布局,设置属性,一种是在代码中初始化然后根据提供的set方法来设置相应的属性。
在你布局中使用的时候要加上
xmlns:app=”Http://schemas.android.com/apk/res/com.example.circleview”
com.example.circleview:是包名
这样你就可以设置这个控件的属性了

<com.example.circleview.CircleImg
        android:id="@+id/itemImg"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="2dp"
        app:bgColor="#f88"
        app:borderColor="#138DDD"
        app:textColor="#fff"
        app:textSize="12dp" />

最终效果:

基本的一个圆就好了,现在来实现开始的时候的效果图,基本就是用listView实现:
布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res/com.example.circleview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    android:orientation="vertical"
    tools:context="com.example.circleview.MainActivity" >


    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:divider="#00000000"
        android:dividerHeight="0dp"
      >
    </ListView>

</LinearLayout>

MainActivity.java:

public class MainActivity extends Activity {
    private List<String> list=new ArrayList<String>();
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        listView=(ListView) findViewById(R.id.listView);
        listView.setAdapter(new TimeLineAdapter(list, this));
    }

    private void initData() {
        for (int i =11; i >1; i--) {//时间从小到大
        list.add("05/"+i);  
        }
    }
}

Adapter:

public class TimeLineAdapter extends BaseAdapter {
    private static final int[] COLOR = new int[] {  
            0xff33b5e5, 0xffaa66cc, 0xff99cc00, 0xffffbb33, 0xffff4444,0xff009933,0xffff9988,  0xffffddcc,0xff00ffff,0xffffff00
        }; 
    private List<String> list;
    private Context context;
    private ViewHolder holder;

    public TimeLineAdapter(List<String> list, Context context) {
        super();
        this.list = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

         int type = getItemViewType(position);
        if(convertView==null){
            convertView=View.inflate(context, R.layout.item,null);
            holder=new ViewHolder();
            convertView.setTag(holder);
            holder.img=(CircleImg) convertView.findViewById(R.id.itemImg);
            holder.item=(TextView) convertView.findViewById(R.id.itemText);
        }else{
            holder=(ViewHolder) convertView.getTag();
        }
        holder.img.setBgAndBorderColor(COLOR[position%10]);
        holder.img.invalidate();//记得重绘
        holder.img.setLineLocation(type);
        holder.img.setmTextTitle(list.get(position));
        holder.item.setText("哈哈哈哈哈哈哈哈");
        return convertView;
    }
    @Override
    public int getItemViewType(int position) {
          final int size = list.size() - 1;
            if (size == 0)
                return ItemType.ATOM;
            else if (position == 0)
                return ItemType.FOOTER;
            else if (position == size)
                return ItemType.HEADER;
            else return ItemType.NORMAL;
    }

    class ViewHolder{
        TextView item;
        CircleImg img;
    }

}

这里绘制上下line的时候是通过getItemViewType()返回的view id值来判断的,ItemType中有四个变量:

public final static int NORMAL = 2;  //表示绘制上下方
public final static int HEADER = 0;  //表示绘制下方
public final static int FOOTER = 1;  //表示绘制上方
public final static int ATOM = -1;   //表示不绘制

然后通过holder.img.setLineLocation(type);来设置当前绘制的line。

CIcleVIew.java下:


public class CircleImg extends View {
    //画笔
    private Paint bgPaint, linePaint, borderPaint,textPaint;
    private Rect bgRect, textRect;

    //基本属性
    private int mTextSize;
    private int mTextColor;
    private String mTextTitle;

    private int lineColr = Color.parseColor("#AAAAAA");
    private int borderColor = Color.parseColor("#AAAAAA");
    private int bgColor = Color.parseColor("#138DDD");
    private int mBorderColor;
    private int mBorderWidth = 2;
    private int mLineColor;
    private int mLineWidth = 2;
    private int mLineHeight;
    private int mBgColor;

    //line绘制
    private int lineLocation = -1;//0  上方 1  下方 2  上下两个
    private int mRadius = 40;

    public CircleImg(Context context) {
        this(context, null);
    }

    //设置line的位置 0  上方 1  下方 2  上下两个
    public void setLineLocation(int lineLocation) {
        this.lineLocation = lineLocation;
    }


    //设置纯色的整圆形,包括背景
    public void setBgAndBooderCOlor(int color) {
        this.mBorderColor = color;
        this.mBgColor = color;
    }


    public void setmTextTitle(String mTextTitle) {
        this.mTextTitle = mTextTitle;
    }

    public void setmRadius(int mRadius) {
        this.mRadius = mRadius;
    }

    public CircleImg(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        // TODO Auto-generated constructor stub
    }

    public CircleImg(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomCicleView, defStyle, 0);
        int n = a.getIndexCount();
        for (int i = 0; i < n; i++) {
            int attr = a.getIndex(i);
            switch (attr) {
                case R.styleable.CustomCicleView_textSize:
                    // 默认设置为16sp,TypeValue也可以把sp转化为px
                    mTextSize = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(
                            TypedValue.COMPLEX_UNIT_PX, 14, getResources().getDisplayMetrics()));
                    break;
                case R.styleable.CustomCicleView_textColor:
                    mTextColor = a.getColor(attr, Color.BLACK);
                    break;
                case R.styleable.CustomCicleView_textTitle:
                    mTextTitle = a.getString(attr);
                    break;
                case R.styleable.CustomCicleView_lineWidth:
                    mLineWidth = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(
                            TypedValue.COMPLEX_UNIT_PX, 2, getResources().getDisplayMetrics()));
                    break;
                case R.styleable.CustomCicleView_lineColor:
                    mLineColor = a.getColor(attr, lineColr);
                    break;

                case R.styleable.CustomCicleView_mRadius:
                    mRadius=a.getInt(attr,40);
                    break;
                case R.styleable.CustomCicleView_borderWidth:
                    mBorderWidth = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(
                            TypedValue.COMPLEX_UNIT_PX, 2, getResources().getDisplayMetrics()));
                    break;
                case R.styleable.CustomCicleView_borderColor:
                    mBorderColor = a.getColor(attr, borderColor);
                    break;
                case R.styleable.CustomCicleView_bgColor:
                    mBgColor = a.getColor(attr, bgColor);
                    break;
            }
        }
        a.recycle();
        bgPaint = new Paint();
        borderPaint = new Paint();
        linePaint = new Paint();
        textPaint = new Paint();
        textRect = new Rect();
        textPaint.setTextSize(mTextSize);


    }
    //暂时不计算

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int w = getPaddingLeft() + getPaddingRight();
        int h = getPaddingTop() + getPaddingBottom();

        if (bgPaint != null) {
            w += mRadius;
            h += mRadius;
        }

        w = Math.max(w, getMeasuredWidth());
        h = Math.max(h, getMeasuredHeight());

        int widthSize = resolveSizeAndState(w, widthMeasureSpec, 0);
        int heightSize = resolveSizeAndState(h, heightMeasureSpec, 0);


        setMeasuredDimension(widthSize, heightSize);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
       int centre = getWidth() / 2; // 获取圆心的x坐标
        int radius = mRadius - mBorderWidth / 2;// 半径

        mLineHeight=getHeight()/2-radius;//这个地方要判断设置正负

        if(lineLocation!=-1){

            drawLine(canvas,centre);
        }

        //绘制背景
        bgPaint.setColor(Color.parseColor("#00000000"));
        bgPaint.setTextSize(mTextSize);
        canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), bgPaint);

        //绘制圆

        bgPaint.setAntiAlias(true); // 消除锯齿
        bgPaint.setColor(mBgColor);
        bgPaint.setStyle(Paint.Style.FILL); // 设置实心
        canvas.drawCircle(centre, centre, radius, bgPaint);
        //绘制圆环
        borderPaint.setStrokeWidth(mBorderWidth); // 设置圆环的宽度
        borderPaint.setAntiAlias(true); // 消除锯齿
        if (mBorderColor != 0) {
            borderPaint.setColor(mBorderColor);
        } else {
            borderPaint.setColor(borderColor);
        }
        borderPaint.setStyle(Paint.Style.STROKE); // 设置实心
        canvas.drawCircle(centre,centre, radius - mBorderWidth / 2+mLineWidth/2, borderPaint);

        //绘制文本
        bgPaint.setColor(mTextColor);
        textPaint.getTextBounds(mTextTitle, 0, mTextTitle.length(), textRect);
        canvas.drawText(mTextTitle, centre -textRect.width()/2, centre  + textRect.height() / 2, bgPaint);

    }

    //0  上方 1  下方 2  上下两个
    private void drawLine(Canvas canvas, float centre) {
        linePaint.setColor(borderColor);
        linePaint.setStrokeWidth(mLineWidth);
        if (lineLocation == 0) {

            canvas.drawLine(centre, centre, centre, centre * 2F + mLineHeight, linePaint);
        } else if (lineLocation == 1) {
            canvas.drawLine(centre, 0, centre, mLineHeight*2, linePaint);

        } else if (lineLocation == 2) {
            canvas.drawLine(centre, 0, centre, mLineHeight*2, linePaint);
            canvas.drawLine(centre, centre, centre, centre * 2F + mLineHeight, linePaint);

        }


    }

}

styleable.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <attr name="textSize" format="dimension" />
    <attr name="textColor" format="color" />
    <attr name="textTitle" format="string" />
    <attr name="borderColor" format="color" />
    <attr name="borderWidth" format="dimension" />
    <attr name="lineColor" format="color" />
    <attr name="lineWidth" format="dimension" />
    <attr name="bgColor" format="color" />
    <attr name="mRadius" format="dimension"/>
    <declare-styleable name="CustomCicleView">
        <attr name="textSize" />
        <attr name="textColor" />
        <attr name="textTitle" />
        <attr name="lineColor" />
        <attr name="lineWidth" />
        <attr name="bgColor" />
        <attr name="borderColor" />
        <attr name="borderWidth" />
           <attr name="mRadius" />
    </declare-styleable>

</resources>

简易时间轴二

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: android自定义控件实现简易时间轴(1)

本文链接: https://www.lsjlt.com/news/163635.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android自定义控件实现简易时间轴(1)
    本文实例为大家分享了android自定义控件实现简易时间轴的具体代码,供大家参考,具体内容如下 之前项目需要写一个消费记录,类似于时间轴似的控件,自身在自定义控件这里不咋地(&hel...
    99+
    2024-04-02
  • android自定义控件实现简易时间轴(2)
    这篇做了一个简单的时间轴控件。右侧的数据就是一个简单的字符串。问题还是有的,当右侧的文字长度不一样的时候就会有问题了。现在可以修改一下适配右侧的文字。 效果如下: 代码: priv...
    99+
    2024-04-02
  • android自定义控件如何实现简易时间轴
    这篇“android自定义控件如何实现简易时间轴”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“android自定义控件如何实现简易时间轴”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过...
    99+
    2023-06-28
  • android自定义控件是怎么实现简易时间轴
    这篇文章主要为大家分析了android自定义控件是怎么实现简易时间轴的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“android自定义控件是怎么实现简易时间...
    99+
    2023-06-28
  • Android自定义控件实现时间轴
    本文实例为大家分享了Android自定义控件实现时间轴的具体代码,供大家参考,具体内容如下 由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。 1、先增加自定...
    99+
    2024-04-02
  • Android中怎么实现一个简易时间轴
    这期内容当中小编将会给大家带来有关Android中怎么实现一个简易时间轴,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。新建一个自定义控件:public class WorkExcVie...
    99+
    2023-05-30
    android
  • Android自定义recyclerView实现时光轴效果
    时光轴效果在很多app上都有出现,例如淘宝中快递的跟踪,本文将使用recyclerView实现时光轴效果,我们会到自定义控件,首先先看一下效果图: 接下来是步骤分析 1自定义属性 ...
    99+
    2024-04-02
  • Android开发中怎么自定义时间轴
    今天就跟大家聊聊有关Android开发中怎么自定义时间轴,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体内容如下 时间轴效果,实际上非常简单,就是listView中一个又一个的条目...
    99+
    2023-05-31
    android 时间轴 roi
  • Android实现一个倒计时自定义控件
    目录(一)前言(二)效果展示(三)实现思路(三)代码地址总结(一)前言 Android 其实提供了一个倒计时控件叫做CountDownTimer,这个倒计时控件用起来也很简单,但是要...
    99+
    2024-04-02
  • Android自定义recyclerView怎么实现时光轴效果
    这篇文章主要为大家分析了Android自定义recyclerView怎么实现时光轴效果的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Android自定义re...
    99+
    2023-06-28
  • Android自定义View实现简易画板功能
    本文实例为大家分享了Android自定义View实现简易画板的具体代码,供大家参考,具体内容如下 自定义VIew实现简易画板效果,功能包括清空、选择颜色,选择大小,效果如下 画板布...
    99+
    2024-04-02
  • Android自定义实现日历控件
    本文实例为大家分享了Android自定义实现日历控件的具体代码,供大家参考,具体内容如下 1. Calendar类 2. 布局 创建calendar_layout.xml <...
    99+
    2024-04-02
  • Android自定义模拟时钟控件
    本文实例为大家分享了Android自定义模拟时钟控件的具体代码,供大家参考,具体内容如下 自定义view—透明模拟时钟显示 项目中要用到模拟时钟的显示,查了一些资料根据自...
    99+
    2024-04-02
  • Android 实现自定义折线图控件
    目录前言概述原点计算Y轴宽度计算X轴高度X轴绘制轴线X轴刻度间隔网格线、文本Y轴计算Y轴分布刻度间隔、网格线、文本折线代码前言 日前,有一个“折现图”的需求,...
    99+
    2024-04-02
  • Android如何实现一个倒计时自定义控件
    这篇“Android如何实现一个倒计时自定义控件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何实现一个倒计...
    99+
    2023-06-29
  • Android自定义控件实现简单滑动开关效果
    本文实例为大家分享了Android自定义控件实现简单滑动开关的具体代码,供大家参考,具体内容如下 ToggleButton 滑动开关 项目概述 滑动开关是一个纯粹的自定义控件,上面的...
    99+
    2024-04-02
  • Android开发自定义实时图表控件实现示例
    目录概述演示环境实现第一步:新建项目RealTimeChartDemo第二步:新建RealTimeChart类第三步:添加自定义变量第四步:初始化基础参数第五步:初始化宽高等参数第六...
    99+
    2024-04-02
  • Android怎么自定义View实现简易画板功能
    这篇文章主要介绍“Android怎么自定义View实现简易画板功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义View实现简易画板功能”文章能帮助大家解决问题。自定义VIe...
    99+
    2023-06-30
  • Android如何自定义实现日历控件
    这篇文章主要介绍Android如何自定义实现日历控件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1. Calendar类2. 布局创建calendar_layout.xml<LinearLayou...
    99+
    2023-06-25
  • WheelPicker自定义时间选择器控件
    本文实例为大家分享了WheelPicker自定义时间选择器控件的具体代码,供大家参考,具体内容如下 先上图: 使用android自带的DatePicker控件虽然也能实现功能,但样...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作