Адаптивный радиус на CardView - PullRequest
0 голосов
/ 24 января 2019

У меня проблема, я надеюсь, что вы принесете мне некоторую информацию.Чтобы получить круговой VideoView, я помещаю его в CardView

<android.support.v7.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/cardVideo"
                    app:cardCornerRadius="180dp"
                    android:background="#000">

                    <com.twilio.video.VideoView
                        android:id="@+id/videoView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:visibility="visible" />
                </android.support.v7.widget.CardView>

Но проблема в том, что я создаю свое приложение на нескольких планшетах, а cardCornerRadius не адаптирован к размеру экрана, 180dp этослишком большой для 8-дюймового планшета, поэтому мой VideoView отображается в DIAMONDS:

enter image description here

и, например, для 10-дюймового планшета это идеальный круг: enter image description here

Я пытался программно получить размеры устройства и использовать setRadius (), но это не идеально, и я не думаю, что это правильный путь.

Что я могу сделать, чтобы найти хороший радиус угла, адаптированный к планшету?Спасибо

1 Ответ

0 голосов
/ 24 января 2019

Хорошо, я нашел ваш ответ:

Добавьте этот класс в свой проект

package com.example.myapplication;

import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.widget.FrameLayout;

public class RoundedCornerLayout extends FrameLayout {

    private Path path = new Path();

    public RoundedCornerLayout(Context context) {
        super(context);
    }

    public RoundedCornerLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RoundedCornerLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        // compute the path
        float halfWidth = w / 2f;
        float halfHeight = h / 2f;
        float centerX = halfWidth;
        float centerY = halfHeight;
        path.reset();
        path.addCircle(centerX, centerY, Math.min(halfWidth, halfHeight), Path.Direction.CW);
        path.close();

    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        int save = canvas.save();
        canvas.clipPath(path);
        super.dispatchDraw(canvas);
        canvas.restoreToCount(save);
    }
}

и положите туда VideoView. как здесь:

<com.example.myapplication.RoundedCornerLayout
        android:layout_width="100dp"
        android:layout_height="100dp">

    // place your VideoView 
    <ImageView
            android:layout_width="match_parent"
            android:src="@color/colorPrimary"
            android:layout_height="match_parent"/>

</com.example.myapplication.RoundedCornerLayout>

shot

ссылки: 1 2

...