android的特殊文字与Titanic的特效
来源:互联网 发布:战争游戏红龙 知乎 编辑:程序博客网 时间:2024/06/07 06:51
android中给Textview换个字体样式有时候还是能使人心情愉悦的,当然不要把这个操作想的太复杂,其实很简单。
然后就是Titanic,他需要一张图片进行渲染,下方贴出。好了,效果图在此。
无法录制gif……
废话不多说上代码
首先先说android改变字体格式它有两种方法
两种方法的共同点是都需要在main下建立一个assets
看见assets里面的那些字体格式了吧,网上到处都有.ttf类型的字体格式,挑选自己中意的然后放入assets下,保险起见最好在assets下建立一个font。
做完这一步就该说两种方法了。
第一种xml里面的方法
这个方法需要先写一个自定义的Textview
public class MyFontTextView extends TextView { public MyFontTextView(Context context) { super(context); init(context); // TODO Auto-generated constructor stub } public MyFontTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); // TODO Auto-generated constructor stub } public MyFontTextView(Context context, AttributeSet attrs) { super(context, attrs); init(context); // TODO Auto-generated constructor stub } private void init(Context context) { // TODO Auto-generated method stub AssetManager aManager=context.getAssets(); Typeface font=Typeface.createFromAsset(aManager, "font/english.ttf"); setTypeface(font); }}
方法可以直接粘来用
然后就是xml里调一下就可
<bwei.com.caonima.MyFontTextView android:gravity="center" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="7dp" android:textStyle="bold" android:id="@+id/psps" android:text="Jingdong mall" android:textColor="#000000" android:textSize="30sp" />
第二种就简单了
布局直接Textview皆可
然后就是主方法里写一点代码即可
Typeface face = Typeface.createFromAsset(getAssets(),”font/english.ttf”);
psp.setTypeface(face);
可简单。
这个是单独的写字体
然后是单独的Titanic
写几个自定义的Titanic
public class Titanic { private AnimatorSet animatorSet; private Animator.AnimatorListener animatorListener; public Animator.AnimatorListener getAnimatorListener() { return animatorListener; } public void setAnimatorListener(Animator.AnimatorListener animatorListener) { this.animatorListener = animatorListener; } public void start(final TitanicTextView textView) { final Runnable animate = new Runnable() { @Override public void run() { textView.setSinking(true); // horizontal animation. 200 = wave.png width ObjectAnimator maskXAnimator = ObjectAnimator.ofFloat(textView, "maskX", 0, 200); maskXAnimator.setRepeatCount(ValueAnimator.INFINITE); maskXAnimator.setDuration(1000); maskXAnimator.setStartDelay(0); int h = textView.getHeight(); // vertical animation // maskY = 0 -> wave vertically centered // repeat mode REVERSE to go back and forth ObjectAnimator maskYAnimator = ObjectAnimator.ofFloat(textView, "maskY", h/2, - h/2); maskYAnimator.setRepeatCount(ValueAnimator.INFINITE); maskYAnimator.setRepeatMode(ValueAnimator.REVERSE); maskYAnimator.setDuration(10000); maskYAnimator.setStartDelay(0); // now play both animations together animatorSet = new AnimatorSet(); animatorSet.playTogether(maskXAnimator, maskYAnimator); animatorSet.setInterpolator(new LinearInterpolator()); animatorSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { textView.setSinking(false); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { textView.postInvalidate(); } else { textView.postInvalidateOnAnimation(); } animatorSet = null; } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); if (animatorListener != null) { animatorSet.addListener(animatorListener); } animatorSet.start(); } }; if (!textView.isSetUp()) { textView.setAnimationSetupCallback(new TitanicTextView.AnimationSetupCallback() { @Override public void onSetupAnimation(final TitanicTextView target) { animate.run(); } }); } else { animate.run(); } } public void cancel() { if (animatorSet != null) { animatorSet.cancel(); } }}
public class TitanicTextView extends TextView { public interface AnimationSetupCallback { public void onSetupAnimation(TitanicTextView titanicTextView); } // callback fired at first onSizeChanged private AnimationSetupCallback animationSetupCallback; // wave shader coordinates private float maskX, maskY; // if true, the shader will display the wave private boolean sinking; // true after the first onSizeChanged private boolean setUp; // shader containing a repeated wave private BitmapShader shader; // shader matrix private Matrix shaderMatrix; // wave drawable private Drawable wave; // (getHeight() - waveHeight) / 2 private float offsetY; public TitanicTextView(Context context) { super(context); init(); } public TitanicTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TitanicTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { shaderMatrix = new Matrix(); } public AnimationSetupCallback getAnimationSetupCallback() { return animationSetupCallback; } public void setAnimationSetupCallback(AnimationSetupCallback animationSetupCallback) { this.animationSetupCallback = animationSetupCallback; } public float getMaskX() { return maskX; } public void setMaskX(float maskX) { this.maskX = maskX; invalidate(); } public float getMaskY() { return maskY; } public void setMaskY(float maskY) { this.maskY = maskY; invalidate(); } public boolean isSinking() { return sinking; } public void setSinking(boolean sinking) { this.sinking = sinking; } public boolean isSetUp() { return setUp; } @Override public void setTextColor(int color) { super.setTextColor(color); createShader(); } @Override public void setTextColor(ColorStateList colors) { super.setTextColor(colors); createShader(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); createShader(); if (!setUp) { setUp = true; if (animationSetupCallback != null) { animationSetupCallback.onSetupAnimation(TitanicTextView.this); } } } /** * Create the shader * draw the wave with current color for a background * repeat the bitmap horizontally, and clamp colors vertically */ private void createShader() { if (wave == null) { wave = getResources().getDrawable(R.drawable.wave); } int waveW = wave.getIntrinsicWidth(); int waveH = wave.getIntrinsicHeight(); Bitmap b = Bitmap.createBitmap(waveW, waveH, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); c.drawColor(getCurrentTextColor()); wave.setBounds(0, 0, waveW, waveH); wave.draw(c); shader = new BitmapShader(b, Shader.TileMode.REPEAT, Shader.TileMode.CLAMP); getPaint().setShader(shader); offsetY = (getHeight() - waveH) / 2; } @Override protected void onDraw(Canvas canvas) { // modify text paint shader according to sinking state if (sinking && shader != null) { // first call after sinking, assign it to our paint if (getPaint().getShader() == null) { getPaint().setShader(shader); } // translate shader accordingly to maskX maskY positions // maskY is affected by the offset to vertically center the wave shaderMatrix.setTranslate(maskX, maskY + offsetY); // assign matrix to invalidate the shader shader.setLocalMatrix(shaderMatrix); } else { getPaint().setShader(null); } super.onDraw(canvas); }}
这两个类一写就是布局了
<bwei.com.caonima.xiaodongxi.TitanicTextView android:gravity="center" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="7dp" android:textStyle="bold" android:id="@+id/psps" android:text="Jingdong mall" android:textColor="#000000" android:textSize="30sp" />
然后就是主页面
new Titanic().start(psp);
完事
这都是单独的
现在需要给它们两个合起来
其实一样的把上面两个Titanic类一粘就是布局上面的布局
<bwei.com.caonima.xiaodongxi.TitanicTextView android:gravity="center" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="7dp" android:textStyle="bold" android:id="@+id/psps" android:text="Jingdong mall" android:textColor="#000000" android:textSize="30sp" />
然后就是主页面
Typeface face = Typeface.createFromAsset(getAssets(),"font/english.ttf"); psp.setTypeface(face); new Titanic().start(psp);
完事了,写了半天看起好麻烦了样子其实很简单!怪我太啰嗦!
阅读全文
0 0
- android的特殊文字与Titanic的特效
- CSS3的文字发光特效
- MTK一些特殊特效的制作
- android 文字Flash特效
- 设置文字边框的方法 文字带边框的特效
- 实现不间断向上滚动文字的特效
- 平滑的JavaScript文字渐变光特效
- 兼容多浏览器的文字滚动特效
- 滚动变色的文字js特效
- 文字滚动后自动停止的特效
- 纯css3实现的文字亮光特效
- 【JavaScript应用篇】--实现文字的特效
- 文字 AnimatedOpeningType css3的文字3D翻转特效
- Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)
- Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)
- Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)
- Android的UI特效
- 文字的特殊阴影效果代码
- 使用 Spring Data JPA 简化 JPA 开发
- 【EasyUI】输入框box、linkbutton、menubutton、提示控件
- ⚔疯狂输出⚔ 类中的String的用法
- Apache Commons Text示例
- Jupyter Notebook
- android的特殊文字与Titanic的特效
- 数据结构实验之查找六:顺序查找
- 第十五周项目1
- 第二课第三周 deeplaerning.ai编程实现
- Python入门学习小记
- WIN7 +Python2.7.14 + pip + Djanggo1.9
- Spark 以及 spark streaming 核心原理及实践
- pwnable.kr
- [二维区间DP?] Atcoder ARC004E. Salvage Robots