问题&问题:
我目前有一个视图寻呼机,里面只有2页/视图,水平相邻。
我的观点是自定义的,它以低不透明度/ alpha值绘制双色渐变和顶部的图像。
我发现当我在屏幕上滑动以从第一个视图/页面移动到第二个视图/页面或反之亦然时,图像会被压扁。 如何阻止这种情况发生,并正常绘制?
示例:
左侧图片显示第一个可见的视图, 预刷卡 ; 右侧图片会显示两个视图, 通过滑动中途 。
代码:
我之前设置的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);
}
答案 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"
,这可能有帮助)