我去太空盖间房旅租 發表於 2019-7-6 14:21:00

Android开发 GradientDrawable详解

<h1><span style="color: rgba(0, 128, 128, 1)">版权声明</span></h1>
<p>本文来自博客园,作者:观心静&nbsp;,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11142599.html</p>
<div>本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。</div>
<h1><span style="color: rgba(0, 128, 128, 1)">前言</span></h1>
<p>  GradientDrawable 支持渐变色的Drawable,与shapeDrawable在画型上是类似的,多了支持渐变色。代码上的GradientDrawable比在xml里的shape下gradient属性强大的多,因为shape下gradient属性只支持三色阶渐变,而GradientDrawable可以有更多的色阶渐变。</p>
<h1><span style="color: rgba(0, 128, 128, 1)">画线</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable =<span style="color: rgba(0, 0, 0, 1)"> new GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.LINE);
      gradientDrawable.setStroke(</span><span style="color: rgba(128, 0, 128, 1)">5</span>, Color.YELLOW);//<span style="color: rgba(0, 0, 0, 1)">线的宽度 与 线的颜色
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725113213239-1307263181.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">画虚线</span></h1>
<div class="cnblogs_code">
<pre>      mTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,<span style="color: rgba(0, 0, 255, 1)">null</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">要显示虚线一定要关闭硬件加速</span>
      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.LINE);
      gradientDrawable.setStroke(</span>1, Color.BLACK, 10, 10<span style="color: rgba(0, 0, 0, 1)">);<span style="color: rgba(0, 128, 0, 1)">//<span style="color: rgba(0, 128, 0, 1)">第一个参数为线的宽度第二个参数是线的颜色 第三个参数是虚线段的长度 第四个参数是虚线段之间的间距长度</span></span>
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>也可以在布局里关闭指定view的硬件加速</p>
<div class="cnblogs_code">
<pre>android:layerType="software"</pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725115207991-397503458.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">画圆</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.OVAL);
      gradientDrawable.setColor(Color.BLUE);
      gradientDrawable.setSize(</span>50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725105004095-377278427.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">画圆环</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.OVAL);
      gradientDrawable.setColor(Color.BLUE);
      gradientDrawable.setStroke(</span>10<span style="color: rgba(0, 0, 0, 1)">,Color.YELLOW);
      gradientDrawable.setSize(</span>50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725105139902-2001458724.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">圆角矩形</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColor(Color.RED);
      gradientDrawable.setStroke(</span>10<span style="color: rgba(0, 0, 0, 1)">,Color.BLUE);
      gradientDrawable.setCornerRadius(</span>10<span style="color: rgba(0, 0, 0, 1)">);
      gradientDrawable.setSize(</span>50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725105351684-754395280.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">虚线矩形</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.LINEAR_GRADIENT);
      gradientDrawable.setStroke(</span>1, Color.GREEN,30, 30<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725114608383-663368380.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">颜色渐变</span></h1>
<h3>线性渐变</h3>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">int</span>[] colors =<span style="color: rgba(0, 0, 0, 1)"> {Color.YELLOW, Color.GREEN, Color.BLUE};
      GradientDrawable gradientDrawable </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColors(colors); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加颜色组</span>
       gradientDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置线性渐变</span>
      gradientDrawable.setSize(50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725111016617-1515481208.png" alt=""></p>
<h3>改变线性渐变方向</h3>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">int</span>[] colors =<span style="color: rgba(0, 0, 0, 1)"> {Color.YELLOW, Color.GREEN, Color.BLUE};
      GradientDrawable gradientDrawable </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColors(colors); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加颜色组</span>
      gradientDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置线性渐变</span>
      gradientDrawable.setOrientation(GradientDrawable.Orientation.RIGHT_LEFT);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置渐变方向</span>
      gradientDrawable.setSize(50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725112534867-55050029.png" alt=""></p>
<h3>半径渐变</h3>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">int</span>[] colors =<span style="color: rgba(0, 0, 0, 1)"> {Color.YELLOW, Color.GREEN, Color.BLUE};
      GradientDrawable gradientDrawable </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColors(colors); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加颜色组</span>
      gradientDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置半径渐变</span>
      gradientDrawable.setGradientRadius(50<span style="color: rgba(0, 0, 0, 1)">);<span style="color: rgba(0, 128, 0, 1)">//渐变的<span style="color: rgba(0, 128, 0, 1)">半径值</span></span>
      gradientDrawable.setSize(</span>50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725111146350-1289010982.png" alt=""></p>
<h3>扫描渐变</h3>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">int</span>[] colors =<span style="color: rgba(0, 0, 0, 1)"> {Color.YELLOW, Color.GREEN, Color.BLUE};
      GradientDrawable gradientDrawable </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColors(colors); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加颜色组</span>
      gradientDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置扫描渐变</span>
      gradientDrawable.setGradientCenter(0.5f,0.5f);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">渐变中心点</span>
      gradientDrawable.setSize(50,50<span style="color: rgba(0, 0, 0, 1)">);
      mTextView.setBackground(gradientDrawable);</span></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725112304501-101313598.png" alt=""></p>
<h1><span style="color: rgba(0, 128, 128, 1)">防抖</span></h1>
<div class="cnblogs_code">
<pre>gradientDrawable.setDither(<span style="color: rgba(0, 0, 255, 1)">true</span>);</pre>
</div>
<p>可以让渐变的时候颜色阶梯降低,变得更柔和</p>
<p>&nbsp;</p>
<h1><span style="color: rgba(0, 128, 128, 1)">透明度</span></h1>
<div class="cnblogs_code">
<pre>      GradientDrawable gradientDrawable = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> GradientDrawable();
      gradientDrawable.setShape(GradientDrawable.RECTANGLE);
      gradientDrawable.setColor(Color.YELLOW);
      gradientDrawable.setAlpha(</span>70);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置透明度</span>
      mTextView.setBackground(gradientDrawable);</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1497956/201907/1497956-20190725112820997-2016809731.png" alt=""></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <div style="text-align: center">
    <p style="color:orange;font-size:16px;" >本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11142599.html </p>
    <div style="color:orange;font-size:16px;">本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div>
</div><br><br>
来源:https://www.cnblogs.com/guanxinjing/p/11142599.html
頁: [1]
查看完整版本: Android开发 GradientDrawable详解