2015-10-27 6 views
0

Я разрабатываю приложение для Android mobiles. Я хочу воспроизвести видео. Он работает нормально. Теперь у меня одна проблема. Я хочу установить угол для VideoView. Можно ли установить угол для VideoView?Corner for VideoView - Android

Я используя следующий код XML:

<RelativeLayout 
     android:id="@+id/video_relative" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

> 

    <VideoView 
     android:id="@+id/video_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 

    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 

     /> 

    </RelativeLayout> 

И в моем Java-код:

myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.my_video)); 



myVideoView.setOnPreparedListener(new OnPreparedListener() { 

      public void onPrepared(MediaPlayer mediaPlayer) { 
       // close the progress bar and play the video 
//    progressDialog.dismiss(); 
       //if we have a position on savedInstanceState, the video playback should start from here 
       myVideoView.seekTo(position); 
       if (position == 0) { 
        myVideoView.start(); 

       } 

       else { 
        //if we come from a resumed activity, video playback will be paused 
        myVideoView.pause(); 
       } 
      } 
     }); 

Пожалуйста, кто-то поможет мне решить эту проблему.

+0

Я решил это после этого подхода: [https://stackoverflow.com/questions/5574212/android-view-clipping](https://stackoverflow.com/questions/5574212/android-view-clipping) – Aaron

ответ

0

Я установил угол для видеообзора успешно. Мое решение прост. Я просто установил фон для просмотра видео. Фоновое изображение - только 9-патч-изображение, только цвет в углу центра просто прозрачен. Я не знаю, что это чистое решение или нет, но оно решило мою проблему.

0

Я бы предложил установить настраиваемый фоновый рисунок. Мой образец добавляет округлый угол фона с тенью внизу.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <shape 
     android:dither="true" 
     android:shape="rectangle"> 
     <corners android:radius="2dp"/> 

     <solid android:color="@color/black_alpha_08"/> 
    </shape> 
    </item> 
    <item android:bottom="2dp"> 
    <shape 
     android:dither="true" 
     android:shape="rectangle"> 
     <corners android:radius="2dp"/> 

     <solid android:color="@color/grey_02"/> 
     <stroke 
      android:width="0.5dp" android:color="@color/grey_30"/> 

     <padding android:bottom="2dp"/> 
    </shape> 
    </item> 
</layer-list> 

И, конечно же, вам нужно определить свои собственные цвета;)

+0

I попробуйте этот код и установите его в качестве фона, подобного этому андроиду: background = "@ drawable/stack". Но это не работает. По-прежнему воспроизводится прямоугольное видео. (stack - мое имя xml) – Amsheer

+0

@ Amsheer вы пробовали с заполнением 0dp, как в моем примере? Если он не работает, я помню, что я использовал некоторый класс для округления рамки ImageView с другим подходом, поэтому я мог бы опубликовать его для вас, чтобы попробовать с видео. – kirotab

+0

Угол для изображения будет работать. Моя проблема - видео. – Amsheer

0

Попробуйте использовать фон рисует определение формы нужно. Это простая форма с 6dp для радиуса границы.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <stroke android:width="0dp" android:color="#00FFFFFF" /> 
    <solid android:color="#AA3377AA"/> 
    <corners android:radius="6dp" /> 
    <padding android:left="0dp" android:top="0dp" 
      android:right="0dp" android:bottom="0dp" /> 
</shape> 

Ах, а также вы можете использовать его как это:

android:background="@drawable/rounded_border" 

EDIT

Другой вариант (сделано с точки зрения изображения, но, возможно, вы могли бы адаптировать его для работы с видео) , Однако я не уверен в производительности.

public class RoundedImageView extends ImageView { 
    private final Paint restorePaint = new Paint(); 
    private final Paint maskXferPaint = new Paint(); 
    private final Paint canvasPaint = new Paint(); 

    private final Rect bounds = new Rect(); 
    private final RectF boundsf = new RectF(); 

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

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

    public RoundedImageView(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     canvasPaint.setAntiAlias(true); 
     canvasPaint.setColor(Color.argb(255, 255, 255, 255)); 
     restorePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); 
     maskXferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.getClipBounds(bounds); 
     boundsf.set(bounds); 

     canvas.saveLayer(boundsf, restorePaint, Canvas.ALL_SAVE_FLAG); 
     super.onDraw(canvas); 

     canvas.saveLayer(boundsf, maskXferPaint, Canvas.ALL_SAVE_FLAG); 
     canvas.drawARGB(0, 0, 0, 0); 
     canvas.drawRoundRect(boundsf, 6, 6, canvasPaint); 

     canvas.restore(); 
     canvas.restore(); 
    } 
} 
+0

Я тоже пробовал ваш ответ. Это делает угол, но видео все еще в прямоугольной форме. – Amsheer

+0

@ Amsheer Пожалуйста, проверьте его после редактирования, я думаю, что VideoView имеет тот же метод рисования, поэтому его должно быть легко протестировать по крайней мере. – kirotab