Joh*_*ohn 8 java xml android textview
我从早上起就一直在尝试这个,但我无法让它发挥作用.
我想要做的是为TextView创建一个有点长的阴影,类似于以下内容:
http://www.iceflowstudios.com/v3/wp-content/uploads/2013/07/long_shadow_banner.jpg http://web3canvas.com/wp-content/uploads/2013/07/lsd-ps-action-720x400巴纽
到目前为止,我的解决方案是创建大量的TextView并将它们相互层叠,但如果我按照当前的方式使用它会有很多性能问题.
另一个解决方案是使用具有类似吸引力的自定义字体,但我找不到任何与我当前使用的字体相匹配的字体.
所以我想知道,是否可以使用:(我必须提一下,textview是动态创建的)
TV.setShadowLayer(1f, 5f, 5f, Color.GREY);
Run Code Online (Sandbox Code Playgroud)
要在一行中创建多个(作为级联图层),使阴影看起来很平滑?或者你们建议任何其他解决方案?
提前致谢.
Ole*_* K. 12
尝试使用光栅图像:
Paint.getTextBounds()
方法检测文本的边界Bitmap
使用此类指标创建透明(W + H) x H
(您可以使用Bitmap.Config.ALPHA_8
优化内存使用)Bitmap
的0x0
位置Bitmap
到原始宽度的新行,但高度为1px
Y-axis
的Bitmap
(从顶部到底部),并绘制单行Bitmap
与由对应的偏移量X-axis
(你将透支一些透明的像素)Bitmap
如果您检测到最后一行中的所有像素具有相同的颜色(完整阴影),则可以优化此算法.
更新1
我使用这个快速解决方案实现了这样的结
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
LongShadowTextView longShadow = new LongShadowTextView(this);
longShadow.setText("Hello World");
setContentView(longShadow);
}
}
Run Code Online (Sandbox Code Playgroud)
LongShadowTextView.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.View;
public class LongShadowTextView extends View {
private Bitmap mBitmap;
private String mText;
public LongShadowTextView(Context context) {
super(context);
}
public void setText(String text) {
Paint paint = new Paint();
// TODO provide setters for these values
paint.setColor(Color.BLACK);
paint.setTextSize(142);
Rect rect = new Rect();
paint.getTextBounds(text, 0, text.length(), rect);
Bitmap bitmap = Bitmap.createBitmap(rect.width() + rect.height(), rect.height(), Bitmap.Config.ALPHA_8);
Canvas canvas = new Canvas(bitmap);
canvas.drawText(text, 0, rect.height(), paint);
Rect src = new Rect();
RectF dst = new RectF();
int w = bitmap.getWidth();
int h = bitmap.getHeight();
src.left = 0;
src.right = w;
for (int i = 0; i < h; ++i) {
src.top = i;
src.bottom = i + 1;
dst.left = 1;
dst.top = i + 1;
dst.right = 1 + w;
dst.bottom = i + 2;
canvas.drawBitmap(bitmap, src, dst, null);
}
mText = text;
mBitmap = bitmap;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, null);
}
}
Run Code Online (Sandbox Code Playgroud)
更新2
这是我取得的最终结果.从github 克隆这个演示.
归档时间: |
|
查看次数: |
1952 次 |
最近记录: |