1. package com.loaderman.customviewdemo;
  2.  
  3. import android.content.Context;
  4. import android.graphics.*;
  5. import android.util.AttributeSet;
  6. import android.view.View;
  7.  
  8. public class ShadowLayerView extends View {
  9. private Paint mPaint = new Paint();
  10. private Bitmap mDogBmp;
  11. private int mRadius = 1, mDx = 10, mDy = 10;
  12. private boolean mSetShadow = true;
  13.  
  14. public ShadowLayerView(Context context) {
  15. super(context);
  16. init();
  17. }
  18.  
  19. public ShadowLayerView(Context context, AttributeSet attrs) {
  20. super(context, attrs);
  21. init();
  22. }
  23.  
  24. public ShadowLayerView(Context context, AttributeSet attrs, int defStyle) {
  25. super(context, attrs, defStyle);
  26. init();
  27. }
  28.  
  29. private void init() {
  30. setLayerType(LAYER_TYPE_SOFTWARE, null);
  31. mPaint.setColor(Color.BLACK);
  32. mPaint.setTextSize(25);
  33. mDogBmp = BitmapFactory.decodeResource(getResources(), R.drawable.dog);
  34. }
  35.  
  36. public void changeRadius() {
  37. mRadius++;
  38. postInvalidate();
  39. }
  40.  
  41. public void changeDx() {
  42. mDx += 5;
  43. postInvalidate();
  44. }
  45.  
  46. public void changeDy() {
  47. mDy += 5;
  48. postInvalidate();
  49. }
  50.  
  51. public void setShadow(boolean showShadow) {
  52. mSetShadow = showShadow;
  53. postInvalidate();
  54. }
  55.  
  56. @Override
  57. protected void onDraw(Canvas canvas) {
  58. super.onDraw(canvas);
  59.  
  60. canvas.drawColor(Color.WHITE);
  61.  
  62. if (mSetShadow) {
  63. mPaint.setShadowLayer(mRadius, mDx, mDy, Color.GRAY);
  64. } else {
  65. mPaint.clearShadowLayer();
  66. }
  67.  
  68. canvas.drawText("启舰", 100, 100, mPaint);
  69.  
  70. canvas.drawCircle(200, 200, 50, mPaint);
  71.  
  72. canvas.drawBitmap(mDogBmp, null, new Rect(200, 300, 200 + mDogBmp.getWidth(), 300 + mDogBmp.getHeight()), mPaint);
  73. }
  74. }
  1. package com.loaderman.customviewdemo;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6.  
  7. public class MainActivity extends Activity implements View.OnClickListener{
  8.  
  9. private ShadowLayerView mShadowLayerView;
  10.  
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. mShadowLayerView = (ShadowLayerView)findViewById(R.id.shadowlayerview);
  16. findViewById(R.id.radius_btn).setOnClickListener(this);
  17. findViewById(R.id.dx_btn).setOnClickListener(this);
  18. findViewById(R.id.dy_btn).setOnClickListener(this);
  19. findViewById(R.id.clear_btn).setOnClickListener(this);
  20. findViewById(R.id.show_btn).setOnClickListener(this);
  21. }
  22. public void onClick(View v) {
  23. switch (v.getId()){
  24. case R.id.radius_btn:
  25. mShadowLayerView.changeRadius();
  26. break;
  27. case R.id.dx_btn:
  28. mShadowLayerView.changeDx();;
  29. break;
  30. case R.id.dy_btn:
  31. mShadowLayerView.changeDy();
  32. break;
  33. case R.id.clear_btn:
  34. mShadowLayerView.setShadow(false);
  35. break;
  36. case R.id.show_btn:
  37. mShadowLayerView.setShadow(true);
  38. break;
  39. }
  40. }
  41. }

效果:


  1. setShadowLayer(float radius, float dx, float dy, int shadowColor)
  1. radius 模糊半径
    dxdy偏移距离
    shadowColor绘制阴影的画笔颜色,对图片无效

setShadpwLayer实现阴影效果的更多相关文章

  1. WPF阴影效果(DropShadowEffect)

    <TextBlock Text="阴影效果" FontSize="32"> <TextBlock.Effect> <DropSha ...

  2. iOS图片模糊效果与阴影效果

    /** 添加图片模糊效果 @parms  要添加模糊效果的view @return */ + (UIVisualEffectView *)addVisualEffectViewWithView:(UI ...

  3. silverlight控件阴影效果示例

    <ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto" HorizontalSc ...

  4. Shine.js – 帮助你实现各种好看的阴影效果

    Shine.js 是一个用于实现漂亮阴影的 JavaScript 库.您可以设置动态光的位置,可定制的阴影.不依赖于第三方库,兼容 AMD.能在支持 textShadow 或 boxShadow 的浏 ...

  5. jQuery Flat Shadow – 轻松实现漂亮的长阴影效果

    长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感.长阴影快速发展为流行的设计趋势,并经常被应用到扁平设计方案的对象.更详细的介绍可以阅 ...

  6. CSS3 -web-box-shadow实现阴影效果

    -webkit-box-shadow:2px -2px 10px #06c; 给元素添加阴影效果 text-shadow 是给文本添加阴影效果属性同上 形成的阴影跟阴影本体大小一致,四个属性分别代表 ...

  7. css中box-shadow阴影效果的使用

    text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果.随着HTML5和CSS3的普及,这一特殊效果使用越来越普遍. 基本语法是{box-shadow:[inset ...

  8. (转)教你实现Winform窗体的四边阴影效果

    1.首先我们得有这样一张阴影图片. 2.然后分别有两个窗体去实现这个阴影效果. SkinForm - 用于实现阴影的绘制,特性:鼠标可穿透,无法点击,跟随窗体. SkinMain - 主窗体,也是承载 ...

  9. 格式与布局 CSS阴影效果(Box-shadow)用法

    一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 二.position:absolute 1.外层没有position:absolute(或relat ...

随机推荐

  1. 【转】通过BeanNameAutoProxyCreator改变臃肿代码

    https://www.cnblogs.com/zdd-java/p/7861824.html 前言: 最近接手了一个项目,大概过了下需求,然后打开项目准备开搞的时候发现一个问题,这个项目是提供res ...

  2. linux网络编程之posix条件变量

    今天来学习posix的最后一个相关知识----条件变量,言归正传. 下面用一个图来进一步描述条件变量的作用: 为什么呢? 这实际上可以解决生产者与消费者问题,而且对于缓冲区是无界的是一种比较理解的解决 ...

  3. flask+uwsgi+supervisor部署流程

    背景: 小鱼最近搞了个工程,python用的2.7(用3也可以),后端使用的是flask,服务器用的linux,使用 flask+uwsgi+supervisor部署 ,查阅相关博客.调试.实操,已经 ...

  4. Java 中抽象类与接口的区别

    TypeScript 中的接口,有点类似抽象类的概念.Java 中抽象类属于包含属性与抽象行为,而接口通常只是抽象行为.抽象类可以实现模板模式. 参考 https://www.cnblogs.com/ ...

  5. 常见的HTML5语义化标签

    ​ <title>:页面主体内容.<hn>:h1~h6,分级标题,<h1> 与 <title> 协调有利于搜索引擎优化.<ul>:无序列表. ...

  6. [NOI2008]假面舞会 (搜索+gcd)

    题意 LuoguP1477 题解 对于每一条边(u,v)(u,v)(u,v),建两条边(u→v,1),(v→u,−1)(u\to v,1),(v\to u,-1)(u→v,1),(v→u,−1).跑b ...

  7. 第一章使用JSP/Server技术开发新闻发布系统第一章动态网页开发基础

      一:为什么需要动态网页    由于静态网页的内容是固定的,不能提供个性化和定制化得服务,使用动态网页可真正地与用户实现互动. 二:什么是动态网页  ①:动态网页是指在服务器端运行的,使用程序语言设 ...

  8. REST与RPC区别

    OSI网络七层模型 第一层:应用层.定义了用于在网络中进行通信和传输数据的接口: 第二层:表示层.定义不同的系统中数据的传输格式,编码和解码规范等: 第三层:会话层.管理用户的会话,控制用户间逻辑连接 ...

  9. Oracle 全部后台进程简介

    LGWR,DBWR,SMON,PMON,CKPT是必需的五个后台进程.ARCH是最重要的可选后台进程.最重要的六个进程:1.LGWR重做日志写进程,LOG write 负责将重做日志缓冲区记录顺序写入 ...

  10. [HNOI2002]营业额统计 II

    https://www.luogu.org/problemnew/show/2234 将权值离散化,以权值为下标建立权值线段树 #include <bits/stdc++.h> using ...