【问题标题】:Android: Overlay a picture (jpg) with transparencyAndroid:用透明度覆盖图片(jpg)
【发布时间】:2011-07-09 20:59:19
【问题描述】:

我有一张想要在屏幕上显示的图片 (jpg)。 此外,图片应部分被透明效果覆盖。 透明盖应该是动态的。所以例如每天都会显示更多的图片。 这是一张图片来说明我的意思:

我有一张没有灰色封面的图片,想添加此封面,但步骤不同。

谁能给我一个提示如何做到这一点。

【问题讨论】:

    标签: android image transparency


    【解决方案1】:

    您可以使用小部件简单地做到这一点:

    FrameLayout 是在另一个视图之上覆盖视图的通用机制:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <ImageView  
        android:id="@+id/image"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/my_image"/>
    <View
        android:id="@+id/overlay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    </FrameLayout>
    

    然后在您的 Java 代码中,您可以动态设置叠加层的透明度:

    View overlay = (View) findViewById(R.id.overlay);
    int opacity = 200; // from 0 to 255
    overlay.setBackgroundColor(opacity * 0x1000000); // black with a variable alpha
    FrameLayout.LayoutParams params =
        new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, 100);
    params.gravity = Gravity.BOTTOM;
    overlay.setLayoutParams(params);
    overlay.invalidate(); // update the view
    

    【讨论】:

    • 谢谢!这是一个很好的提示。我还有一个问题:我只想覆盖底层图片的一部分。我可以根据你的建议来做吗?
    • 是的,只需相应地调整覆盖视图的大小 (android_layout_height="100dp") 并设置其重力 (android:layout_gravity="bottom") 等。
    • 谢谢,我会试试的。但是我必须在java代码中设置它,因为覆盖的大小应该每小时改变一次。
    • @Matthew Willis:我再次需要你的帮助。你的代码很好用!但我不知道如何从 java 代码中更改叠加层的高度:overlay.setHeight(122) 或类似的东西,以便动态设置这个 android_layout_height="100dp"。可能我必须使用这个:overlay.setLayoutParams(params)?
    • 是的,没错。我使用 Gravity.BOTTOM 和布局参数更新了代码。
    【解决方案2】:

    您可以在画布来自onDraw() 请求的情况下执行类似的操作:

    Paint paint = new Paint();
    Rect r = new Rect(); 
    paint.setColor(0x80808080); // translucent gray 
    r.right = iDisplayWidth-1; 
    r.left = 0; 
    r.top = iDisplayHeight/2; 
    r.bottom = iDisplayHeight-1; 
    canvas.drawRect(r, paint); // fill with gray
    

    【讨论】:

    • 如何将它覆盖在我的图片上?
    • 将位图绘制到画布上,然后在绘制位图后添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多