package com.loaderman.customviewdemo;

import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View; public class ShadowLayerView extends View {
private Paint mPaint = new Paint();
private Bitmap mDogBmp;
private int mRadius = 1, mDx = 10, mDy = 10;
private boolean mSetShadow = true; public ShadowLayerView(Context context) {
super(context);
init();
} public ShadowLayerView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} public ShadowLayerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
} private void init() {
setLayerType(LAYER_TYPE_SOFTWARE, null);
mPaint.setColor(Color.BLACK);
mPaint.setTextSize(25);
mDogBmp = BitmapFactory.decodeResource(getResources(), R.drawable.dog);
} public void changeRadius() {
mRadius++;
postInvalidate();
} public void changeDx() {
mDx += 5;
postInvalidate();
} public void changeDy() {
mDy += 5;
postInvalidate();
} public void setShadow(boolean showShadow) {
mSetShadow = showShadow;
postInvalidate();
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); canvas.drawColor(Color.WHITE); if (mSetShadow) {
mPaint.setShadowLayer(mRadius, mDx, mDy, Color.GRAY);
} else {
mPaint.clearShadowLayer();
} canvas.drawText("启舰", 100, 100, mPaint); canvas.drawCircle(200, 200, 50, mPaint); canvas.drawBitmap(mDogBmp, null, new Rect(200, 300, 200 + mDogBmp.getWidth(), 300 + mDogBmp.getHeight()), mPaint);
}
}
package com.loaderman.customviewdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View; public class MainActivity extends Activity implements View.OnClickListener{ private ShadowLayerView mShadowLayerView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mShadowLayerView = (ShadowLayerView)findViewById(R.id.shadowlayerview);
findViewById(R.id.radius_btn).setOnClickListener(this);
findViewById(R.id.dx_btn).setOnClickListener(this);
findViewById(R.id.dy_btn).setOnClickListener(this);
findViewById(R.id.clear_btn).setOnClickListener(this);
findViewById(R.id.show_btn).setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()){
case R.id.radius_btn:
mShadowLayerView.changeRadius();
break;
case R.id.dx_btn:
mShadowLayerView.changeDx();;
break;
case R.id.dy_btn:
mShadowLayerView.changeDy();
break;
case R.id.clear_btn:
mShadowLayerView.setShadow(false);
break;
case R.id.show_btn:
mShadowLayerView.setShadow(true);
break;
}
}
}

效果:


setShadowLayer(float radius, float dx, float dy, int shadowColor)
radius 模糊半径
dx和dy偏移距离
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. git命令——revert、reset

    参考:如何在 Git 中重置.恢复,返回到以前的状态 使用git时,如果对刚刚提交的后悔了怎么办,如何撤销? 方法一:手动修改 你把新增的文件删了 或者 更改过的文件再改回来,然后再commit一次. ...

  2. Song Form

    First of all, song form is an indepentent concept from the boxes, boxes simply describe the way the ...

  3. DataTable通过Select进行过滤

    DataTable方法测试 //测试DataTable的select DataTable dt = new DataTable(); //a.OrderType, //a.[Status] dt.Co ...

  4. VISION控制器标定及网络分析工具

    VISION 标定和数据采集软件是一个强大的集成工具包,各个工具包可以无缝组合在一起,提供集成的可定制的应用程序,从而能够实现完整的标定和数据分析功能,包括从电子控制单元及外部源收集数据,测量输入和输 ...

  5. SLAM、三维重建,语义相关数据集大全

    作者朱尊杰,公众号:计算机视觉life,编辑成员 一 主要针对自动驾驶: 1.KITTI数据集: http://www.cvlibs.net/datasets/kitti/index.php(RGB+ ...

  6. Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载

    笔记要点出错分析与总结工程组织 1.定义接口 interface DepartmentMapper package com.dao; import com.bean.Department; publi ...

  7. Android adb的一些用法

    adb查看包名/Activity名 adb shell "logcat | grep START" adb shell dumpsys activity | find “mFocu ...

  8. Python 操作Zabbix API 获取ERROR级别告警信息并打印

    1.需求:有一个语音合成播报项目,要实时获取zabbix的ERROR级别以上告警信息,将该信息合成语音播报出去.(合成语音及播报已经完成) 2.现实:整理zabbix告警级别,将不太重要的告警放到ER ...

  9. electron中引入jquery

    <!-- Insert this line above script imports --> <script>if (typeof module === 'object') { ...

  10. 与C++类的初始化有关---深拷贝,浅拷贝及相关问题

    深浅拷贝 如果之前没有仔细了解深浅拷贝的定义,那么从字面意思上理解,深拷贝大概是地址拷贝,因为它足够”深”嘛,那浅拷贝就是仅仅拷贝值喽,谁叫它那么“浅”,然而生活跟我们开了个巨大的玩笑,这俩意思正好满 ...