6

问题和问题:

我目前有一个视图寻呼机,里面只有 2 个页面/视图,它们水平相邻。

我的视图是自定义视图,它们以低不透明度/alpha 值在其顶部绘制双色渐变和图像。

我发现当我在屏幕上滑动以从第一个视图/页面移动到第二个视图/页面或反之亦然时,图像被压扁了。我怎样才能阻止这种情况发生,并正常绘制它们?

例子:

左图显示了第一个可见的视图,预滑动右图显示了两个视图,在 swipe 中途

普通视图 挤压视图,因为我正在刷卡中途

代码:

我有一个Drawable我之前设置的变量,overlayImage除了设置不透明度之外我没有做任何事情。

@Override
protected void onDraw(Canvas canvas) {
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), startColor, endColor, Shader.TileMode.MIRROR));
    canvas.drawPaint(p);

    //Pretty sure the mistake is around these two next lines
    overlayImage.setBounds(canvas.getClipBounds());
    overlayImage.draw(canvas);
}
4

2 回答 2

2

我实际上认为它在你的

overlayImage.setBounds(canvas.getClipBounds());

行代码。当您获得最左侧(在最右侧滑动)视图的剪辑边界时,它正在获得可视区域的大小(即较小的收缩区域),因此图像被绘制到该收缩空间中。

您可能希望通过正在覆盖的视图的整体大小来设置边界,而不是剪裁的边界。改用画布的 getHeight() 和 getWidth() 并建立自己的界限。

我实际上认为你真的应该在你的设置代码中只设置一次 overlayImage 边界。绘制代码根本不需要设置它,然后当视图开始离开屏幕时,overlayImage 的绘制将自然地与绘图画布的其余部分一起移动。

于 2013-02-26T21:24:48.783 回答
0

我认为您需要xmldrawable-hdpi文件夹中创建一个。其中将包含您的shader/linear gradiant.. (选项请看这里

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <gradient
        android:startColor="#474946"
        android:endColor="#181818"
        android:angle="270"/>
</shape>

然后你可以设置xml为背景..这应该可以解决我认为的问题。

(如果它不起作用,请尝试不使用android:shape="rectangle",这可能会有所帮助)

于 2013-02-26T21:09:24.740 回答