アクティビティの上に透明なレイヤーを持つレイヤーを作成したいのですが、たとえば「ログインボタン」など、特定のビューのみを表示する必要があります。これは、ボタンのサイズに合わせてレイヤーに穴をあけることを意味します。誰でも私を助けてください。
前もって感謝します。
アクティビティの上に透明なレイヤーを持つレイヤーを作成したいのですが、たとえば「ログインボタン」など、特定のビューのみを表示する必要があります。これは、ボタンのサイズに合わせてレイヤーに穴をあけることを意味します。誰でも私を助けてください。
前もって感謝します。
あなたの質問を正しく理解できれば
の親レイアウトは に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>
私はこれをテストしませんでしたが、それはあなたの問題を解決するはずです
プログラムでは、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);
}
}
「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 `
これにより、真っ黒な色を排除して透明な領域を確保できます
私があなたの質問を理解したなら、これはあなたが望んでいたものです: あなたはアクティビティに透明なビューを重ねて、いくつかのものを見るために穴を切り取ろうとしました.
ここで、ビットマップを切り取って組み合わせる方法を示す便利な例を見つけました。ここに示すように、ビットマップを切り取ってイメージビューの背景を不透明に設定することを忘れないでください。
android:background="#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>
そして、これは私のマニアックです
public class MainActivity extends 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;
}
}
あなたがそれが役に立つことを願っています