日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android课程设计多彩的霓虹,Android-自定义TextView(彩色字体与霓虹灯字体以及TextView的多项字体效果)...

發布時間:2024/8/1 Android 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android课程设计多彩的霓虹,Android-自定义TextView(彩色字体与霓虹灯字体以及TextView的多项字体效果)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多時候我們也需要制作一些彩色字體的文本,文本的霓虹燈效果,以及鏈接字體哈,字體背景色,下標之類的,而很多時候我們卻用多個textview去達到這個效果,可以說是很浪費時間浪費經精力的,這時候怎么辦呢?下面就有詳解。

文章結構:1.自定義TextView實現彩色字體與霓虹燈字體 2.一個可以字體實現多項效果的類(封裝好了,可直接使用)

先上圖看看我們要做的效果

這里寫圖片描述

一、自定義TextView之彩色字體,直接上代碼解釋

package com.demo.myview.colourfulFontOrNeonTextView;

import android.content.Context;

import android.graphics.Color;

import android.graphics.LinearGradient;

import android.graphics.Paint;

import android.graphics.Shader;

import android.util.AttributeSet;

import android.widget.TextView;

/**

* Created by 符柱成 on 2016/8/19.

*/

public class ColourfulFontTextview extends TextView {

int TextViewWidth; //TextView的寬度

private LinearGradient mLinearGradient; //渲染器

private Paint paint;

public ColourfulFontTextview(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

//在 onSizeChanged 方法中獲取到寬度,并對各個類進行初始化

if (TextViewWidth == 0) {

TextViewWidth = getMeasuredWidth();

if (TextViewWidth > 0) {

//得到 父類 TextView 中寫字的那支筆

paint = getPaint();

//初始化線性渲染器

mLinearGradient = new LinearGradient(0, 0, TextViewWidth, 0,

new int[]{Color.BLUE, Color.YELLOW, Color.RED, Color.GREEN, Color.GRAY}, null, Shader.TileMode.CLAMP);

//把渲染器給筆套上

paint.setShader(mLinearGradient);

}

}

}

}

2.在xml中的引用:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/white"

android:orientation="vertical"

tools:context=".colourfulFontOrNeonTextView.ColourfulFontOrNeonAcitivity">

android:layout_width="match_parent"

android:layout_height="50dp"

android:text="彩色字體!彩色字體!彩色字體!"

android:textSize="28sp" />

android:layout_width="match_parent"

android:layout_height="70dp"

android:text="霓虹燈字體!霓虹燈字體!霓虹燈字體!"

android:textSize="28sp" />

android:id="@+id/tv_content"

android:layout_width="match_parent"

android:layout_height="130dp"

android:layout_marginTop="10dp"

android:background="@color/colorPrimary"

android:text="baiduoryouku正常粗體斜體粗斜體上標下標前景色背景色圖片"

android:textSize="25sp"/>

二、自定義TextView之霓虹燈字體,直接上代碼解釋啦

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.LinearGradient;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Shader;

import android.util.AttributeSet;

import android.widget.TextView;

/**

* Created by 符柱成 on 2016/8/19.

*/

public class NenoTextview extends TextView {

int mViewWidth; //TextView的寬度

private LinearGradient mLinearGradient; //渲染器

private Matrix mMatrix; //圖片變換處理器

private Paint mPaint; //字體的筆

int mTranslate=0; //表示平移的速度

public NenoTextview(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

//在 onSizeChanged 方法中獲取到寬度,并對各個類進行初始化

if (mViewWidth == 0) {

mViewWidth = getMeasuredWidth();

if (mViewWidth > 0) {

//得到 父類 TextView 中寫字的那支筆.,注意是繼承Textview

mPaint = getPaint();

//初始化線性渲染器 不了解的請看上面連接

mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0,

new int[]{Color.BLUE, Color.YELLOW, Color.RED, Color.GREEN}, null, Shader.TileMode.CLAMP);

//把渲染器給筆套上

mPaint.setShader(mLinearGradient);

//初始化 Matrix,Matrix的原意是對一個Bitmap的圖片變化進行處理,它本身不能對圖像或者View進行變換,但是可以與其他的API結合進行圖形和View的變換,比如Canvas

mMatrix = new Matrix();

}

}

}

@Override

protected void onDraw(Canvas canvas) {

//先讓父類方法執行,由于上面我們給父類的 Paint 套上了渲染器,所以這里出現的文字已經是彩色的了

super.onDraw(canvas);

if (mMatrix != null) {

//利用 Matrix 的平移動作實現霓虹燈的效果,這里是每次滾動1/10

mTranslate += mViewWidth / 10;

//如果滾出了控件邊界,就要拉回來重置開頭,這里重置到了屏幕左邊的空間

if (mTranslate > mViewWidth) {

mTranslate = -mViewWidth/2;

}

//設置平移距離

mMatrix.setTranslate(mTranslate, 0);

//平移效果生效

mLinearGradient.setLocalMatrix(mMatrix);

//延遲 100 毫秒再次刷新 View 也就是再次執行本 onDraw 方法

postInvalidateDelayed(50);

}

}

}

xml中的引用已經在上面給出了。

三、多項字體效果,下面將給出一個封裝好的類以及調用方法

package com.demo.myview.colourfulFontOrNeonTextView;

import android.content.Context;

import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.text.SpannableString;

import android.text.Spanned;

import android.text.TextPaint;

import android.text.style.AbsoluteSizeSpan;

import android.text.style.BackgroundColorSpan;

import android.text.style.ForegroundColorSpan;

import android.text.style.ImageSpan;

import android.text.style.StyleSpan;

import android.text.style.SubscriptSpan;

import android.text.style.SuperscriptSpan;

import android.text.style.TypefaceSpan;

import android.text.style.URLSpan;

import android.text.style.UnderlineSpan;

import com.demo.myview.R;

/**

* Created by 符柱成 on 2016/8/19.

*/

//封裝好了Textview多種字體

public class SpannableStringFont {

public static SpannableString changeFont(Context context, String content) {

SpannableString ss = new SpannableString(content);

// flag:標識在 Span 范圍內的文本前后輸入新的字符時是否把它們也應用這個效果

// Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、

// Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、

// Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、

// Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)

//設置字體(default,default-bold,monospace,serif,sans-serif)

ss.setSpan(new TypefaceSpan("monospace"), 6, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// 設置網絡超鏈接

ss.setSpan(new URLSpan("http://www.baidu.com"), content.indexOf("baidu"), content.indexOf("or"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(new URLSpan("http://www.youku.com"), content.indexOf("youku"), content.indexOf("正常"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// 設置字體顏色

ss.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), content.indexOf("baidu"), content.indexOf("or"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(new ForegroundColorSpan(Color.parseColor("#0000FF")), content.indexOf("or"), content.indexOf("youku"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(new ForegroundColorSpan(Color.parseColor("#ff00ff")), content.indexOf("youku"), content.indexOf("正常"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// 設置字體大小

ss.setSpan(new AbsoluteSizeSpan(sp2px(context, 25)), content.indexOf("baidu"), content.indexOf("or"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.setSpan(new AbsoluteSizeSpan(sp2px(context, 30)), content.indexOf("youku"), content.indexOf("正常"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// 設置下劃線

ss.setSpan(new MyUnderlineSpan(), content.indexOf("youku"), content.indexOf("正常"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//設置字體樣式正常,粗體,斜體,粗斜體

ss.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), content.indexOf("正常"), content.indexOf("粗體"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常

ss.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), content.indexOf("粗體"), content.indexOf("斜體"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗體

ss.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), content.indexOf("斜體"), content.indexOf("粗斜體"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜體

ss.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), content.indexOf("粗斜體"), content.indexOf("上標"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜體

//設置上下標

ss.setSpan(new SubscriptSpan(), content.indexOf("上標"), content.indexOf("下標"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下標

ss.setSpan(new SuperscriptSpan(), content.indexOf("下標"), content.indexOf("前景色"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上標

//設置字體前景色

ss.setSpan(new ForegroundColorSpan(Color.MAGENTA), content.indexOf("前景色"), content.indexOf("背景色"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設置前景色為洋紅色

//設置字體背景色

ss.setSpan(new BackgroundColorSpan(Color.CYAN), content.indexOf("背景色"), content.indexOf("圖片"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設置背景色為青色

//設置圖片

Drawable drawable = context.getDrawable(R.drawable.home_serve_dot_pressed);

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

ss.setSpan(new ImageSpan(drawable), content.indexOf("圖片"), ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

return ss;

}

//這里是干嘛的呢?為了設置下劃線唄

static class MyUnderlineSpan extends UnderlineSpan {

@Override

public void updateDrawState(TextPaint ds) {

ds.setUnderlineText(true);

}

}

//這又是干嘛的呢?計算字體大小嘛

private static int sp2px(Context context, float spValue) {

final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;

return (int) (spValue * fontScale + 0.5f);

}

}

嗯,,還缺個調用,為了方便新手使用,下面也貼出來:

public class ColourfulFontOrNeonAcitivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_colourful_font_or_neon_acitivity);

initView();

}

private void initView(){

TextView textView = (TextView) findViewById(R.id.tv_content);

String content = textView.getText().toString();

textView.setText(SpannableStringFont.changeFont(ColourfulFontOrNeonAcitivity.this,content));

textView.setMovementMethod(LinkMovementMethod.getInstance());

}

}

好了,彩色字體與霓虹燈字體以及TextView的多項字體效果都寫清楚了,歡迎大家在下方指出錯誤,共同學習!

轉載請注明:【JackFrost的博客】

更多精彩的內容,可以訪問JackFrost的博客

總結

以上是生活随笔為你收集整理的android课程设计多彩的霓虹,Android-自定义TextView(彩色字体与霓虹灯字体以及TextView的多项字体效果)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美v视频| 小视频免费在线观看 | 看毛片网站 | www成人在线 | 青青草国产一区二区三区 | 久久爱一区二区 | 日韩乱码人妻无码中文字幕久久 | 日日操夜夜操视频 | 操干网| 亚洲色图50p | 激情春色网 | 亚洲av无码久久精品色欲 | 亚洲av无码国产精品久久 | 伊人五月婷婷 | 亚洲AV乱码国产精品观看麻豆 | 97自拍视频在线 | 久久九精品 | 狠狠干一区 | 毛片91| 综合激情视频 | 欧美cccc极品丰满hd | 日韩美女免费线视频 | 色又色| 91视频久久 | 秋霞国产午夜精品免费视频 | 免费中文字幕在线观看 | 亚洲五十路| 国产精品美女www爽爽爽 | 亚洲综合网址 | 杏导航aⅴ福利网站 | 日日爽夜夜爽 | 在线观看福利网站 | 18视频在线观看网站 | 老熟妇一区二区三区 | 一区二区三区四区五区六区 | 性――交――性――乱a | 午夜伦伦电影理论片费看 | 亚洲欧美一区二区三区在线观看 | 在线观看aa | 色秀av| 亚洲最大在线视频 | 内射国产内射夫妻免费频道 | 欧美日韩免费一区二区三区 | 色图综合| 中文字幕av无码一区二区三区 | 三级艳丽杨钰莹三级 | 欧美人与动物xxxxx | 天天拍夜夜操 | 久久久久五月 | 羞羞影院体验区 | 午夜在线小视频 | 丰满人妻av一区二区三区 | 浓精h攵女乱爱av | 国产麻豆电影在线观看 | 成人区精品一区二区婷婷 | 五月天av网 | 黄色免费看视频 | 精品国产人妻一区二区三区 | 桃色av网站 | 在线观看a级片 | julia一区二区| 香蕉视频啪啪 | 性做久久久久久久久久 | av片免费在线 | 手机免费av| 超能一家人电影免费喜剧在线观看 | 超碰2022| 精品久久电影 | 四虎影院国产精品 | 夜夜操操操 | 亚洲丁香花色 | 久久中文字幕在线 | 精品视频久久久久 | 黄色日本网站 | 欧美性天天 | 可以免费观看av的网站 | 色播一区二区 | 一级理论片 | 91国内精品视频 | 一级绝黄 | 国产精品一区在线观看你懂的 | 亚洲图片另类小说 | va视频在线 | 欧美黄色小视频 | 黑白配av | 黄色网免费看 | 日韩精品极品视频免费观看 | 污片视频在线观看 | a在线| 性色av浪潮 | 樱空桃在线观看 | 亚洲欧洲一区二区在线观看 | 亚洲综合图色40p | np视频| 欧美一级黄色片 | 国产经典久久久 | 精品国产欧美 | 日本不卡专区 | 人人爽人人射 |