Java颜色覆盖下层内容_java – 如何在特定区域中叠加列表项文本颜色?

正如你在他们的实现中所知,他们使用并更新了ListAdapter中的固定位置,然后他们更新了相应匹配的View,这对我来说是最简单,最简单的方法,但你没有得到半个半彩色文字,我觉得你还想要:)

所以这可能是我给出的最糟糕的答案之一,对不起,我可能会重温这一点,或希望有人能指出你更好的解决方案

您可以在以下位置看到模糊的演示:

肮脏的方式:

>使用适当的ColorMatrixColorFilter创建一个Paint,为了回答这个问题我只是去饱和,你必须找出ColorMatrix的5×4矩阵来获得你想要的青色.在下面绘制时,您还需要一些Rects来定义source和dest.

>创建一个用于绘制列表的屏幕外的Bitmap和Canvas,这是在onSizeChanged中完成的,所以我们有适当的视图布局值,在这里你可以开始注意肮脏,因为你必须分配一个像ListView一样大的Bitmap所以你可能会得到OutOfMemoryException.

>覆盖绘图以使用你的屏幕外画布并让ListView绘制到它,然后你可以将Bitmap绘制到将照常绘制列表的给定Canvas,然后绘制该Bitmap的一部分,将使用Paint绘制不同的部分我们之前定义过,你会得到那些像素的透支.

>最后绘制预制玻璃Bitmap,我会推荐一个n-patch(9-patch),因此它可以在屏幕和密度上进行缩放和显示,然后您可以为这些像素获得更多的透支.

整个蛋糕看起来像:

public class OverlayView extends ListView {

private RectF mRect;

private Rect mSrcRect;

private Paint mPaint;

private Canvas mCanvas;

private Bitmap mBitmap;

private float mY;

private float mItemHeight;

public OverlayView(Context context) {

super(context);

initOverlay();

}

public OverlayView(Context context, AttributeSet attrs) {

super(context, attrs);

initOverlay();

}

public OverlayView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

initOverlay();

}

private void initOverlay() {

// DO NOT DO THIS use attrs

final Resources res = getResources();

mY = res.getDimension(R.dimen.overlay_y);

mItemHeight = res.getDimension(R.dimen.item_height);

//

mRect = new RectF();

mSrcRect = new Rect();

mPaint = new Paint();

ColorMatrix colorMatrix = new ColorMatrix();

colorMatrix.setSaturation(0);

mPaint.setColorFilter( new ColorMatrixColorFilter(colorMatrix) );

}

@Override

public void draw(Canvas canvas) {

super.draw(mCanvas);

canvas.drawBitmap(mBitmap, 0, 0, null);

canvas.drawBitmap(mBitmap, mSrcRect, mRect, mPaint);

}

@Override

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

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

mRect.set(0, mY, w, mY + mItemHeight);

mRect.roundOut(mSrcRect);

mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

mCanvas = new Canvas(mBitmap);

}

}

所以说,我希望你最终得到一个更清洁的解决方案,即使你没有达到半个半性感:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值