`

Android TextView中显示彩虹字

阅读更多
一. 實現很簡單,就是對顏色進行線性的漸變。用到的類是LinearGradient.直接貼代碼:
public class Test extends Activity {
 private TextViewTest mTextViewTest;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  mTextViewTest = new TextViewTest(this);
  setContentView(mTextViewTest);
 }

 public class TextViewTest extends TextView {
  private LinearGradient mGradient;
  private int[] mGradientColors = { Color.RED, Color.rgb(255, 165, 0),
    Color.YELLOW, Color.GREEN, Color.rgb(0, 255, 255), Color.BLUE,
    Color.rgb(160, 32, 240) };
  private int mTitleWidth;
  private String mTitle = "三十六天罡,七十二地煞,乃是天地正邪之氣所生,如今奉命下凡轉世為科學家.但法用以正,則可以造福人群;";

  public TextViewTest(Context context) {
   super(context);
   // TODO Auto-generated constructor stub
   setLayoutParams(new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.FILL_PARENT,
     LinearLayout.LayoutParams.FILL_PARENT));
   setWillNotDraw(false);
  }

  @Override
  protected void onDraw(Canvas canvas) {
   // TODO Auto-generated method stub
   super.onDraw(canvas);
   measure(0, 0);
   
   Paint paint = new Paint();
   paint.setStyle(Style.FILL_AND_STROKE);
   mGradient = new LinearGradient(0, 0, getWidth(),
     getMeasuredHeight(), mGradientColors, null, TileMode.REPEAT);
   paint.setShader(mGradient);
   
   mTitleWidth = 0;
   float[] width = new float[mTitle.length()];
   paint.getTextWidths(mTitle, width);
   Log.i("Tag", "Width.length= " + width.length);
   int start = 0;
   int offsetY = 10;
   for (int j = 0; j < mTitle.length(); j++) {
    mTitleWidth += (int) Math.ceil(width[j]);
    if (mTitleWidth > getWidth()) {
     canvas.drawText(mTitle.substring(start, j), 0, offsetY,
       paint);
     mTitleWidth = 0;
     start = start + j;
     offsetY = offsetY + getMeasuredHeight() + 5;
     j--;
    }
   }
   if (mTitleWidth > 0) {
    canvas.drawText(mTitle.substring(start), 0, offsetY, paint);
   }
  }
 }
}

二. 實例圖


  • 大小: 3.6 KB
分享到:
评论
2 楼 mailyiran200101 2011-11-08  
文字的特效用的地方比较多
1 楼 RandyWei 2011-11-02  
不错 ,学习了!

相关推荐

    RoundRainbowTextView:Android自定义TextView,带渐变色边框的彩虹字效果

    RoundRainbowTextView Android自定义TextView,带渐变色边框的彩虹字效果 RoundRainbowTextView textView = findViewById(R.id.custom); textView.setBorder(2, 5, new int[]{Color.RED, Color.YELLOW});

    注解类在android中的使用

    在Android开发中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或运行时环境用来执行特定的操作。注解类的使用极大地提高了代码的可读性和可维护性,同时也简化了依赖...

    Android编程入门很简单.(清华出版.王勇).part1

    1.3Android中的个人英雄主义 1.3.1第一届挑战赛冠军介绍 1.3.2第二届挑战赛冠军介绍 1.3.3Androidmarket 1.4Android平台 1.4.1Android体系结构 1.4.2熟悉的开发工具 1.4.3合理的学习曲线 1.5小结 第2章搭建你的开发...

    黑马Android培训笔记

    Android提供了多种用户界面(UI)组件,如TextView、EditText、Button等,以及布局管理器如LinearLayout、RelativeLayout和ConstraintLayout。笔记将深入讲解这些组件的用法和属性,以及如何通过XML布局文件设计用户...

    Android编程入门很简单.(清华出版.王勇).part2

    1.3Android中的个人英雄主义 1.3.1第一届挑战赛冠军介绍 1.3.2第二届挑战赛冠军介绍 1.3.3Androidmarket 1.4Android平台 1.4.1Android体系结构 1.4.2熟悉的开发工具 1.4.3合理的学习曲线 1.5小结 第2章搭建你的开发...

    Android用户界面设计:线性布局[定义].pdf

    线性布局是Android开发中的一种基础布局方式,用于在屏幕上有序地排列用户界面元素,可以是垂直排列(默认)或水平排列。理解并熟练运用线性布局是构建高效、美观的Android应用程序的关键。 线性布局的主要特点在于...

    Android学习之SlidingMenu实现(向右滑动)

    在Android应用开发中,SlidingMenu是一个非常常见的组件,它为用户提供了一种侧滑导航的方式,使得用户可以通过向左或向右滑动主界面来显示或隐藏附加菜单。本篇文章将详细探讨如何在Android项目中实现一个向右滑动...

    仿QQ界面的Android开发

    Android提供了丰富的布局(如LinearLayout、RelativeLayout、ConstraintLayout等)和组件(如TextView、ImageView、Button等)来构建用户界面。仿QQ界面需要考虑模仿QQ的主界面、聊天窗口、联系人列表等元素。使用...

    Rainbow,

    通过调用Rainbow库中的API,可以轻松地将这些渐变效果应用到View上,如Button、TextView、ImageView等。 除了渐变,Rainbow还支持颜色着色(Color Shading)。这意味着你可以将任意颜色调整为不同的色调,这对于...

    HTextView:动画效果为文本,不是真正的textview

    具有对TextView的自定义字体支持的动画效果 查看见 屏幕截图 类型 gif 规模 蒸发 秋季 线 打字机 彩虹 褪色 用法 def htextview_version = "0.1.6" // as 3.0 use implementation compile ...

    带密码登陆的密码保险箱.zip

    - 密码输入:在Android应用中,通常使用EditText控件来接收用户输入的密码,并通过TextView或ImageView显示密码输入状态(明文或星号)。 - 密码验证:密码通常需要满足一定的复杂性要求,如长度、字符组合等。这...

Global site tag (gtag.js) - Google Analytics