7

我想在活动上创建一个具有透明层的层,并且我需要仅使特定视图可见,例如“登录按钮”。这意味着在层上打孔与按钮的大小完全相同。请任何人帮助我解决这个问题。

提前致谢。

4

4 回答 4

2

如果我正确理解你的问题

您的父布局Activity将是RelativeLayout. match_parent在底部的父布局中添加另一个实现宽度和高度参数的子 RelativeLayout 。然后,您可以将这样的颜色设置#99000000为它的背景。这将为您的父母提供一个黑色透明层。

像这样的东西

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">

    <!-- here you add your activities views ect... -->

    <RelativeLayout
        android:id="@+id/childLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#99000000">
        <!-- This will be your overlay so here you can add your login button ect -->
    </RelativeLayout>

</RelativeLayout>

我没有对此进行测试,但它应该可以解决您的问题

于 2013-06-13T04:39:07.290 回答
1

以编程方式,您可以使用 Canvas 创建图层。用你的颜色填充整个东西并切出一个洞。

public class DrawView extends View {
    Paint paint = new Paint();
    Paint transparentPaint = new Paint;
    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        //first fill everything with your covering color
        paint.setColor(yourTransparentColor);
        canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
        //now clear out the area you want to see through
        transparentPaint.setAlpha(0xFF);
        transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        Rect rect=new Rect(left, top, right, bottom);//make this your rect!
        canvas.drawRect(rect,transparentPaint);
    }
}
于 2013-06-13T04:42:28.610 回答
1

在遵循“HalR”步骤后,我能够实现透明背景,多亏了他,发现你们中的一些人在透明层上的切割上变得漆黑是由于图形渲染。可以使用 onDraw 方法中的以下代码启用

` @Override
public void onDraw(Canvas canvas) {


        if (android.os.Build.VERSION.SDK_INT >= 11) {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
     .....
     ..... // your draw rect creation and other stuff `

这将通过消除 Pitch black 颜色让您拥有透明区域

于 2015-11-03T13:44:44.630 回答
0

如果我理解你的问题,那么这就是你想要的:你试图在你的活动上覆盖一个透明的视图并切出洞来查看一些东西。

在这里,我找到了一个有用的示例,它显示了如何剪切位图并将它们组合起来。对于您的问题,我建议您只参与切割位图,并记住将 imageview 背景设置为不透明度,如下所示

安卓:背景=“#00ffffff”

这是我创建的布局

    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:src="@drawable/ic_launcher"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"/>"

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#00ffffff"
        android:scaleType="centerCrop" >
    </ImageView>


</RelativeLayout>

这是我的手艺

公共类 MainActivity 扩展 Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView iv = (ImageView) findViewById(R.id.img);
    Bitmap foreground = BitmapFactory.decodeResource(getResources(), R.drawable.android_cat_wanted);
    foreground = punchAHoleInABitmap(foreground);
    iv.setImageBitmap(foreground);
}

private Bitmap punchAHoleInABitmap(Bitmap foreground) {
    Bitmap bitmap = Bitmap.createBitmap(foreground.getWidth(), foreground.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint();
    canvas.drawBitmap(foreground, 0, 0, paint);
    paint.setAntiAlias(true);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    float radius = (float)(getScreenSize().x *.35);
    float x = (float) ((getScreenSize().x*.5));
    float y = (float)  ((getScreenSize().y*.5));
    canvas.drawCircle(x, y, radius, paint);
    return bitmap;
}

@SuppressLint("NewApi")
private Point getScreenSize() {
    WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    Display display = window.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return size;
}

}

希望你觉得它有用

于 2015-09-05T23:36:46.670 回答