美文网首页Android绘制Android技术知识Android开发经验谈
Android绘制(一):来用shape绘出想要的图形吧!

Android绘制(一):来用shape绘出想要的图形吧!

作者: sean_depp | 来源:发表于2018-04-17 21:42 被阅读467次

    目录

    • 前言
    • shape绘制
    • 矩形
    • 椭圆
    • 线
    • 用shape绘制SeekBar
    • 最后

    前言

    在没有UI设计师的时候, 或者是想简单看下效果的时候, 用shape进行快速绘制是极好的! 官方文档.


    shape绘制

    一共有四种shape: rectangle, oval, line, ring.

    矩形

    我们一个一个来看, 首先是矩形:

    用shape绘制SeekBar
    • 实现
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/eight_dp"
        android:max="200"
        android:maxHeight="@dimen/eight_dp"
        android:minHeight="@dimen/eight_dp"
        android:progressDrawable="@drawable/layout_progress"
        android:thumb="@drawable/shape_circle" />
    

    简单解释下几个要点属性:

    • max代表进度条最大的值.
    • maxHeight, minHeight可以设置进度条宽度, 我喜欢稍微宽一点的.
    • thumb设置滑块, 可以是图片, 可以是shape写的设置.
    • progressDrawable代表进度条的外观, 可以是图片, 可以是shape写的设置.

    再来看看滑块和进度条外观具体代码, 进度条可以设置背景, 进度, 和第二进度. 滑块的话, 你想画成什么样都行.

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@android:id/background">
            <shape>
                <corners android:radius="@dimen/four_dp" />
                <solid android:color="@android:color/darker_gray" />
            </shape>
        </item>
        <item android:id="@android:id/secondaryProgress">
            <clip>
                <shape>
                    <corners android:radius="@dimen/four_dp" />
                    <solid android:color="@color/colorAccent" />
                </shape>
            </clip>
        </item>
        <item android:id="@android:id/progress">
            <clip>
                <shape>
                    <corners android:radius="@dimen/four_dp" />
                    <solid android:color="@android:color/holo_blue_light" />
                </shape>
            </clip>
        </item>
    </layer-list>
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
        <solid android:color="@android:color/holo_blue_light" />
        <stroke
            android:width="@dimen/one_dp"
            android:color="@android:color/holo_blue_light" />
        <size
            android:width="@dimen/sixteen_dp"
            android:height="@dimen/sixteen_dp" />
    </shape>
    

    java部分的话, 用Handler实例postDelayed方法让进度条跑起来就可以看到效果了. 这里设定50ms发一次消息.

    findViewById(R.id.cv_start).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mRunnable == null) {
                mRunnable = new MyRunnable();
                mHandler.postDelayed(mRunnable, 0);
            }
        }
    });
    
    findViewById(R.id.cv_stop).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mHandler.removeCallbacks(mRunnable);
            mRunnable = null;
        }
    });
    
    private class MyRunnable implements Runnable {
        @Override
        public void run() {
            int progress = mSbTest.getProgress();
            mTvProgress.setText(String.valueOf(progress));
            mSbTest.setProgress(++progress);
            mSbTest.setSecondaryProgress(progress + 10);
    
            int progress2 = mSbTest2.getProgress();
            mTvProgress2.setText(String.valueOf(progress2));
            mSbTest2.setProgress(++progress2);
            mSbTest2.setSecondaryProgress(progress2 + 20);
    
            mHandler.postDelayed(this, 50);
        }
    }
    

    最后

    我个人还是偏向用shape绘制的, 图片一出理不好就是内存溢出啊, 形变啊, 还要注意分辨率, 真心头大. 喜欢记得点赞哦, 暗中关注我也是可以的~


    相关文章

      网友评论

      本文标题:Android绘制(一):来用shape绘出想要的图形吧!

      本文链接:https://www.haomeiwen.com/subject/xmtmkftx.html