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

android 文字怎么加阴影效果 怎么无效,第1张

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" />

样式实现:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="textstyle">

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

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

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

<item name="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"

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

package canvas.test

import android.app.Activity

import android.os.Bundle

import android.content.Context

import android.graphics.Bitmap

import android.graphics.BitmapFactory

import android.graphics.Canvas

import android.graphics.Color

import android.graphics.Paint

import android.graphics.PorterDuff

import android.graphics.PorterDuff.Mode

import android.graphics.PorterDuffXfermode

import android.graphics.Rect

import android.graphics.RectF

import android.graphics.drawable.Drawable

import android.view.View

public class ShaderEffect extends Activity {

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState)

    setContentView(new ImageEffect(this))

  }

  class ImageEffect extends View{

    Paint paint 

    public ImageEffect (Context context){

      super(context)

      paint = new Paint()//初始化画笔,为后面阴影效果使用。

      paint.setAntiAlias(true)//去除锯齿。

      paint.setShadowLayer(5f, 5.0f, 5.0f, Color.BLACK)//设置阴影层,这是关键。

      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN))

    }

    @Override

    public void onDraw(Canvas canvas){

      super.onDraw(canvas)

      int posX = 20

      int posY = 50

      int PicWidth,PicHegiht 

      Drawable drawable = getResources().getDrawable(R.drawable.button)

      Drawable dbe = getResources().getDrawable(R.drawable.button).mutate()//如果不调用mutate方法,则原图也会被改变,因为调用的资源是同一个,所有对象是共享状态的。

      Drawable drawTest = getResources().getDrawable(R.drawable.button)

      Bitmap bmp = 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)

      //Rect rect = new Rect(2*posX + PicWidth, 2*posY + PicHegiht, 2*posX + 2*PicWidth, 2*posY + 2*PicHegiht)//此为理论上的阴影图坐标

      Rect rect = new Rect(2*posX + PicWidth + 3, 2*posY + PicHegiht + 3, 2*posX + 2*PicWidth - 2, 2*posY + 2*PicHegiht - 2)

      //由于图片的实际尺寸比显示出来的图像要大一些,因此需要适当更改下大小,以达到较好的效果

      RectF rectF = new RectF(rect)

      canvas.drawRoundRect(rectF, 10f, 10f, paint)//在原有矩形基础上,画成圆角矩形,同时带有阴影层。

      canvas.drawBitmap(bmp, 2*posX + PicWidth, 2*posY + PicHegiht, null)//画上原图。

      canvas.restore()

    }

  }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8016908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存