Drawable in View被压扁

时间:2013-02-23 16:55:30

标签: java android android-viewpager drawable android-view

问题&问题:

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

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

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

示例:

左侧图片显示第一个可见的视图, 预刷卡 ; 右侧图片会显示两个视图, 通过滑动中途

Normal view Squashed views, as I'm mid-way through swiping

代码:

我之前设置的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);
}

2 个答案:

答案 0 :(得分:2)

我实际上认为它在你的

overlayImage.setBounds(canvas.getClipBounds());

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

您可能希望通过它所覆盖的视图的整体大小来设置边界,而不是剪切的边界。使用画布的getHeight()和getWidth()来构建自己的边界。

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

答案 1 :(得分:0)

我认为您需要在xml文件夹中创建drawable-hdpi。 哪个将包含您的shader/linear gradiant ..(对于选项外观here

<?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",这可能有帮助)