当前位置:首页 » 安卓系统 » android阴影绘制

android阴影绘制

发布时间: 2022-08-17 16:03:36

A. Android中画线加阴影的方法mPaint.setShadowLayer();为什么在android2.2上可以显示阴影,而4.0就不行。

我也遇到了同样的问题,因此搜到了你的提问。
通过一下午的努力,在网上搜,关于这方面的回答不多,然后看了外文的类似的问答,去Android developer guide 里Hardware Acceleration一节里找到了说明,然后询问用过的同事,忙着测试,最后算是解决了问题。
你在maminfest里需要画图的Activity里加上android:hardwareAccelerated="false",禁止使用硬件加速就可以了。文档里只是说禁止硬件加速会有不同的效果,但并没有解释为什么,因此还不清楚这样做的理论。

B. Android如何纯java代码实现字体阴影效果

Android实现纯java代码字体阴影效果,主要是通过activity的draw方法,进行重新绘制,如下代码:

packagecanvas.test;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
importandroid.graphics.drawable.Drawable;
importandroid.view.View;
{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(newImageEffect(this));
}
classImageEffectextendsView{
Paintpaint;
publicImageEffect(Contextcontext){
super(context);
paint=newPaint();//初始化画笔,为后面阴影效果使用。
paint.setAntiAlias(true);//去除锯齿。
paint.setShadowLayer(5f,5.0f,5.0f,Color.BLACK);//设置阴影层,这是关键。
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
}
@Override
publicvoidonDraw(Canvascanvas){
super.onDraw(canvas);
intposX=20;
intposY=50;
intPicWidth,PicHegiht;
Drawabledrawable=getResources().getDrawable(R.drawable.button);
Drawabledbe=getResources().getDrawable(R.drawable.button).mutate();//如果不调用mutate方法,则原图也会被改变,因为调用的资源是同一个,所有对象是共享状态的。
DrawabledrawTest=getResources().getDrawable(R.drawable.button);
Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.button);
PicWidth=drawable.getIntrinsicWidth();
PicHegiht=drawable.getIntrinsicHeight();
drawTest.setBounds(posX,(2*posY)+PicHegiht,posX+PicWidth,(2*posY)+2*PicHegiht);
drawable.setBounds(posX,posY,posX+PicWidth,posY+PicHegiht);
dbe.setBounds(0,0,PicWidth,PicHegiht);
canvas.drawColor(Color.WHITE);//设置画布颜色
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(0x7f000000,PorterDuff.Mode.SRC_IN);
canvas.translate(posX+(int)(0.9*PicWidth/2),posY+PicHegiht/2);//图像平移为了刚好在原图后形成影子效果。
canvas.skew(-0.9F,0.0F);//图像倾斜效果。
canvas.scale(1.0f,0.5f);//图像(其实是画布)缩放,Y方向缩小为1/2。
dbe.draw(canvas);//此处为画原图像影子效果图,比原图先画,则会在下层。
drawable.clearColorFilter();
canvas.restore();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawable.draw(canvas);//此处为画原图像,由于canvas有层次效果,因此会盖在影子之上。
canvas.restore();
//默认无效果原图
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawTest.draw(canvas);
canvas.restore();
//图片阴影效果
canvas.save(Canvas.MATRIX_SAVE_FLAG);
//Rectrect=newRect(2*posX+PicWidth,2*posY+PicHegiht,2*posX+2*PicWidth,2*posY+2*PicHegiht);//此为理论上的阴影图坐标
Rectrect=newRect(2*posX+PicWidth+3,2*posY+PicHegiht+3,2*posX+2*PicWidth-2,2*posY+2*PicHegiht-2);
//由于图片的实际尺寸比显示出来的图像要大一些,因此需要适当更改下大小,以达到较好的效果
RectFrectF=newRectF(rect);
canvas.drawRoundRect(rectF,10f,10f,paint);//在原有矩形基础上,画成圆角矩形,同时带有阴影层。
canvas.drawBitmap(bmp,2*posX+PicWidth,2*posY+PicHegiht,null);//画上原图。
canvas.restore();
}
}
}

C. android安卓setShadowLayer canvas绘制矩形阴影 在电脑模拟器上能显示效果 但是到了手机上却没了阴影效果

是你手机改版的系统吧。

改版的总有莫名其妙的问题,
你用nexus才能体验。
不过模拟器能运行,一般就没问题。

D. 这种 ANDROID边界效果怎么做的.发光或者叫阴影

边界(分割线)可以插入一个imageview 设置background 的颜色为黑色,高度为1dp。至于阴影就是图片,这个得让你们的美工来做。

E. 最近在做Android应用,想做出类似的图片阴影效果,怎么实现

其实这种阴影很简单,就是做一个渐变的黑色阴影然后覆盖在原图就OK了,至于怎么做的话LZ可以看下PHOTOSHOP之类的渐变阴影功能,几分钟就可以做好了

F. 怎么设置好看的阴影 android

TextView的属性: Android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web /email/phone/map/all) android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。 android:bufferType指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2。 android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。 android:cursorVisible设定光标为显示/隐藏,默认显示。 android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()” android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。 android:drawableLeft在text的左边输出一个drawable,如图片。 android:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft、 drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。 android:drawableRight在text的右边输出一个drawable。 android:drawableTop在text的正上方输出一个drawable。 android:editable设置是否可编辑。 android:editorExtras设置文本的额外的输入数据。 android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end” ——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动) android:freezesText设置保存文本的内容以及光标的位置。 android:gravity设置文本位置,如设置成“center”,文本将居中显示。 android:hintText为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在 EditView中使用,但是这里也可以用。 android:imeOptions附加功能,设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。 android:imeActionId设置IME动作ID。 android:imeActionLabel设置IME动作标签。 android:includeFontPadding设置文本是否包含顶部和底部额外空白,默认为true。 android:inputMethod为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。 android:inputType设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。 android:linksClickable设置链接是否点击连接,即使设置了autoLink。 android:marqueeRepeatLimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。 android:ems设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度 android:maxEms设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。 android:minEms设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。 android:maxLength限制显示的文本长度,超出部分不显示。 android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。 android:maxLines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。 android:minLines设置文本的最小行数,与lines类似。 android:lineSpacingExtra设置行间距。 android:lineSpacingMultiplier设置行间距的倍数。如”1.2” android:numeric如果被设置,该TextView有一个数字输入法。此处无用,设置后唯一效果是TextView有点击效果,此属性在EdtiView将详细说明。 android:password以小点”.”显示文本 android:phoneNumber设置为电话号码的输入方式。 android:privateImeOptions设置输入法选项,此处无用,在EditText将进一步讨论。 android:scrollHorizontally设置文本超出TextView的宽度的情况下,是否出现横拉条。 android:selectAllOnFocus如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。 TextView中设置后无效果。 android:shadowColor指定文本阴影的颜色,需要与shadowRadius一起使用。 android:shadowDx设置阴影横向坐标开始位置。 android:shadowDy设置阴影纵向坐标开始位置。 android:shadowRadius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。 android:singleLine设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。如果不设置singleLine或者设置为false,文本将自动换行 android:text设置显示文本. android:textAppearance设置文字外观。如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse android:textColor设置文本颜色 android:textColorHighlight被选中文字的底色,默认为蓝色 android:textColorHint设置提示信息文字的颜色,默认为灰色。与hint一起使用。 android:textColorLink文字链接的颜色. android:textScaleX设置文字之间间隔,默认为1.0f。 android:textSize设置文字大小,推荐度量单位”sp”,如”15sp” android:textStyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“”隔开 android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米) android:maxHeight设置文本区域的最大高度 android:minHeight设置文本区域的最小高度 android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。 android:maxWidth设置文本区域的最大宽度 android:minWidth设置文本区域的最小宽度

G. 怎么为android控件边缘添加阴影

为控件设置一个有阴影感的背景图片即可,可以使用shape


在自定义shape中增加一层或多层,并错开,即可显示阴影效果。为增加立体感,按钮按下的时候,只设置一层。我们可以通过top, bottom, right 和 left 四个参数来控制阴影的方向和大小



//自定义两种阴影效果

第一种

<?xmlversion="1.0"encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_pressed="true">
<layer-list>
<itemandroid:left="4dp"android:top="4dp">
<shape>
<solidandroid:color="#ff58bb52"/>
<cornersandroid:radius="30dip"/>
</shape>
</item>
</layer-list>
</item>
<item>
<layer-list>
<!--第一层-->
<itemandroid:left="4dp"android:top="4dp">
<shape>
<solidandroid:color="#66000000"/>
<cornersandroid:radius="30dip"/>
<!--描边-->
<strokeandroid:width="1dp"android:color="#ffffffff"/>
</shape>
</item>
<!--第二层-->
<itemandroid:bottom="4dp"android:right="4dp">
<shape>
<solidandroid:color="#ff58bb52"/>
<cornersandroid:radius="30dip"/>
<!--描边-->
<strokeandroid:width="1dp"android:color="#ffffffff"/>
</shape>
</item>
</layer-list>
</item>
</selector>


第二种

<?xmlversion="1.0"encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<!--点击之后-->
<itemandroid:state_pressed="true">
<layer-list>
<itemandroid:left="4dp"android:top="4dp">
<shape>
<solidandroid:color="#ff58bb52"/>
<cornersandroid:radius="3dp"/>
</shape>
</item>
</layer-list>
</item>
<!--正常状态-->
<item>
<layer-list>
<!--第一层-->
<itemandroid:left="2dp"android:top="2dp">
<shape>
<solidandroid:color="#66000000"/>
<cornersandroid:radius="3dp"/>
</shape>
</item>
<!--第二层-->
<itemandroid:bottom="4dp"android:right="4dp">
<shape>
<solidandroid:color="#ff58bb52"/>
<cornersandroid:radius="3dp"/>
</shape>
</item>
<!--第三层-->
<itemandroid:bottom="6dp"android:right="6dp">
<shape>
<solidandroid:color="#ffcccccc"/>
<cornersandroid:radius="3dp"/>
</shape>
</item>
</layer-list>
</item>
</selector>

设置后的效果图如下

H. 安卓怎么在linearLayout或者其他一些组件底部添加阴影

有两种解决方案:

1、使用9-patch 图片,制作一个阴影部分的图片,然后横向拉伸即可


2、使用layer-list

  • 在res/drawable下,新建background_with_shadow.xml文件,该文件代码如下:

<?xmlversion="1.0"encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

<!--bottomshadow-->
<item>
<shapeandroid:shape="rectangle">
<!--fromtoptobottom-->
<gradient
android:angle="90"
android:centerColor="#bbbbbb"
android:endColor="#d5d5d5"
android:startColor="#a9a09d"/>
<cornersandroid:radius="5dp"/>
</shape>
</item>

<!--content-->
<itemandroid:bottom="2dp">
<shapeandroid:shape="rectangle">
<solidandroid:color="#50c1e9"/>
<cornersandroid:radius="5dp"/>
</shape>
</item>

</layer-list>
  • 使用background_with_shadow.xml文件

假设有bottom_shadow.xml文件,内容如下:

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#bfbfbf">

<LinearLayout
android:layout_marginTop="40dp"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="vertical"
android:background="@drawable/background_with_shadow">
</LinearLayout>

<TextView
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="活动海报"/>

</LinearLayout>
  • 效果图如下

I. android 文字怎么加阴影效果 怎么无效

Android:shadowColor 阴影颜色

android:shadowDx 阴影的水平偏移量

android:shadowDy 阴影的垂直偏移量

android:shadowRadius 阴影的范围

为了统一风格和代码的复用,通常可以把这个样式抽取放入到style.xml文件中


<TextView
style="@style/textstyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="字体样式"
android:textSize="30sp"
android:textStyle="bold" />


样式实现:

<?xmlversion="1.0"encoding="utf-8"?>

<resources>

<stylename="textstyle">

<itemname="android:shadowColor">#ff0000ff</item>

<itemname="android:shadowRadius">10</item>

<itemname="android:shadowDx">5</item>

<itemname="android:shadowDy">5</item>

</style>

</resources>



关于android文字阴影,共有四个属性可以设置:

  • android:shadowColor :阴影颜色

  • android:shadowDx :阴影x方向位移

  • android:shadowDy :阴影y方向位移

  • android:shadowRadius :阴影的半径

注意:阴影的半径必须设,为0时没有效果。

下面为改变x位移:

android:shadowColor="#ff000000" (前两位为透明度)

android:shadowDx="2"

android:shadowDy="0"

android:shadowRadius="1"


效果(向右为正):

下面为改变y位移:

android:textColor="#979790"

android:shadowColor="#ff000000"

android:shadowDx="0"

android:shadowDy="2"

android:shadowRadius="1"

效果(向下为正):

下面改变半径:

android:shadowDx="1"

android:shadowDy="1"

android:shadowRadius="1"

J. android 圆角边框 阴影边框怎么设置

所谓添加阴影,就是两个画布从重叠,上方的画布小于下方的画布,阴影颜色为下方的画布的颜色。
item 中shape 的属性 (rectangle:矩形;line:线性;oval:椭圆;ring:环形),默认为矩形
corners //设置圆角幅度,必须是在shape=rectangle的时候,corners才有效
<corners
Android:radius="dimension" //全部的圆角半径
android:topLeftRadius="dimension" //左上角的圆角半径
android:topRightRadius="dimension" //右上角的圆角半径
android:bottomLeftRadius="dimension" //左下角的圆角半径
android:bottomRightRadius="dimension" /> //右下角的圆角半径
eg:<corners android:radius="10dp" />
solid用以指定内部填充色
e.g:<solid android:color="color" />
gradient //定义渐变色,可以定义两色渐变和三色渐变,及渐变样式
linear(线性渐变)、radial(放射性渐变)、sweep(扫描式渐变), 在构造放射性渐变时,要加上android:gradientRadius属性(渐变半径),即必须指定渐变半径的大小才会起作用。
<gradient
android:type=["linear" | "radial" | "sweep"] //共有3中渐变类型
android:angle="integer" //渐变角度,必须为45的倍数,0为从左到右,90为从上到下
android:centerX="float" //渐变中心X的相当位置,范围为0~1
android:centerY="float" //渐变中心Y的相当位置,范围为0~1
android:startColor="color" //渐变开始点的颜色
android:centerColor="color" //渐变中间点的颜色,在开始与结束点之间
android:endColor="color" //渐变结束点的颜色
android:gradientRadius="float" //渐变的半径,只有当渐变类型为radial时才有效
android:useLevel=["true" | "false"] /> //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果
stroke //这是描边属性,可以定义描边的宽度,颜色,虚实线等
<stroke
android:width="dimension" //描边的宽度
android:color="color" //描边的颜色 // 以下两个属性设置虚线
android:dashWidth="dimension" //虚线的宽度,值为0时是实线
android:dashGap="dimension" /> //虚线的间隔

热点内容
单独编译内核模块 发布:2025-01-16 18:54:26 浏览:802
js解压字符串 发布:2025-01-16 18:54:17 浏览:482
php怎么开启服务器 发布:2025-01-16 18:52:53 浏览:769
亿速云北京三区服务器云主机 发布:2025-01-16 18:52:01 浏览:359
我的世界网易服务器做家园 发布:2025-01-16 18:50:33 浏览:553
虚拟存储安全教程 发布:2025-01-16 18:49:48 浏览:574
vps配置ftp 发布:2025-01-16 18:49:02 浏览:157
qtc比python好用 发布:2025-01-16 18:39:48 浏览:488
电脑有免费服务器吗 发布:2025-01-16 18:35:28 浏览:220
sql生成唯一 发布:2025-01-16 18:35:25 浏览:223