1. 程式人生 > >自定義VideoView實現視訊畫面的縮放

自定義VideoView實現視訊畫面的縮放

1_自定義VideoView,增加設定視訊大小方法

public class VideoView extends android.widget.VideoView {    /**

  • Android系統在更加xml佈局找這個類,並且例項化的時候,用該構造方法例項化

  • @param context

  • @param attrs/    public VideoView(Context context, AttributeSet attrs) {        super(context, attrs);    }

    public VideoView(Context context) {        super(context);

    }

    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);    }

    /**

  • 設定視訊畫面的寬和高

  • @param videoWidth

  • @param videoHeight/    public void setVideoSize(int videoWidth, int videoHeight) {

            ViewGroup.LayoutParams layoutParams  =getLayoutParams();        layoutParams.width = videoWidth;        layoutParams.height = videoHeight;        setLayoutParams(layoutParams);    }

}

2_在播放器中得到螢幕高和寬方法

//方式一

wm = (WindowManager) getSystemService(WINDOW_SERVICE);screenWidth = wm.getDefaultDisplay().getWidth();

screenHeight = wm.getDefaultDisplay().getHeight();

//方式二

DisplayMetrics displayMetrics = new DisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);screenWidth = displayMetrics.widthPixels;screenHeight = displayMetrics.heightPixels;

3_視訊預設和全屏

一播放起來,在準備好了中設定視訊播放預設

/**

  • true全屏

  • flase預設*/  private boolean isFullScreen = false;  /**

  • 視訊全屏和預設

  • @param type*/  public void setVideoType(int type){    switch (type) {        case SCREEN_FULL:            videoview.setVideoSize(screenWidth, screenHeight);            isFullScreen = true;            btn_switch_screen.setBackgroundResource(R.drawable.btn_screen_dafult_selector);            break;

        case SCREEN_DEFULT:            //視訊的寬            int mVideoWidth = videoWidth;            //視訊的高            int mVideoHeight = videoHeight;            //螢幕的寬            int width = screenWidth;            //螢幕的寬            int height = screenHeight;            if (mVideoWidth > 0 && mVideoHeight > 0) {                if ( mVideoWidth * height  > width * mVideoHeight ) {                    //Log.i("@@@", "image too tall, correcting");                    height = width * mVideoHeight / mVideoWidth;                } else if ( mVideoWidth * height  < width * mVideoHeight ) {                    //Log.i("@@@", "image too wide, correcting");                    width = height * mVideoWidth / mVideoHeight;                } else {                    //Log.i("@@@", "aspect ratio is correct: " +                    //width+"/"+height+"="+                    //mVideoWidth+"/"+mVideoHeight);                }            }

            videoview.setVideoSize(width, height);            btn_switch_screen.setBackgroundResource(R.drawable.btn_screen_full_selector);            isFullScreen = false;

            break;    }

}

4_點選按鈕的時候實現切換播放模式 case R.id.btn_switch_screen:  if(isFullScreen){     setVideoType(SCREEN_DEFUALT);  }else{     setVideoType(SCREEN_FULL);  }  break

5 手勢識別器實現雙擊縮放螢幕

detector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener()
{
    /**
     * 長按
     * @param e
     */
    @Override
    public void onLongPress(MotionEvent e)
    {
        super.onLongPress(e);

    }

    /**
     * 雙擊
     * @param e
     * @return
     */
    @Override
    public boolean onDoubleTap(MotionEvent e)
    {
        //                Toast.makeText(SystemVideoPlayer.this, "我被雙擊了", Toast
        // .LENGTH_SHORT).show();
          if (isFullScreen)
        {
            //設定為預設
            setVideoType(DEFAULT_SCREEN);
        }
        else
        {
            //設定為全屏
            setVideoType(FULL_SCREEN);
        }
        return super.onDoubleTap(e);
    }

    /**
     * 單擊
     * @param e
     * @return
     */
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e)
    {
        //                Toast.makeText(SystemVideoPlayer.this, "我被單擊了", Toast
        // .LENGTH_SHORT).show();



        return super.onSingleTapConfirmed(e);
    }
});

相關推薦

定義VideoView實現視訊畫面

1_自定義VideoView,增加設定視訊大小方法 public class VideoView extends android.widget.VideoView {    /** Android系統在更加xml佈局找這個類,並且例項化的時候,用該構造方法例項化 @pa

Android進階——巧借定義VideoView實現Activity的動態視訊背景

引言 話說這個Activity 動態背景我第一次是在一個菠菜App上看到的,當時感覺逼格很高,最近正好用到專案中,而且好像好久沒有寫關於UI這些“有趣”的文章啦,這篇文章就簡單小結下,其實實現動態背景這並不是唯一的方案,還有其他的方式。 一、VideoView

定義控制元件:手勢移動,遮罩

import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import and

FFMpeg實現視訊

#ifndef _IO_FILE_H_ #define _IO_FILE_H_ typedef struct _IOFile { char *inputName; /*輸入檔名*/ char *outputName; /*輸出檔名*/ char *inputFrameSize;

Android仿微信朋友圈九宮格圖片展示定義控制元件,支援動畫~

一直對微信朋友圈九宮格圖片顯示控制元件比較好奇,找到一篇介紹相關騷操作的部落格 部落格雖好但是不夠完美,缺少點選圖片預覽頁面和縮放動畫,作為一個不斷追求完美主義的人,我想把這個控制元件結合到專案中而不是單純作為一個控制元件。 下面是我的實現效果圖: (

超簡單 定義VideoView視訊拉伸至全屏

話不多說,直接上程式碼。 import android.annotation.TargetApi; import android.content.Context; import android.u

定義ImageView: 實現自由 ,自由移動後的圖片 .雙擊放大與縮小圖片 相容ViewPager

直接擼程式碼, 複製就能用 package com.zhf.baselibrary.view; import android.annotation.SuppressLint; import android.content.Context; import android.graphi

Android利用定義VideoView輕鬆實現視訊做背景

前言:有人問我,即便夢想成真了又能怎樣,或許不能怎樣,但這是夢想。 介紹:最近開發需要弄一個像QQ一樣的登陸介面(介面要用視訊做背景),上網發現這個博主介紹的比較好,便轉載來分享給更多的人。 先看看效果 注意事項(程式碼裡也標註出來了)

Android定義View實現圖片顯示,並實現、拖拽、切換功能

這裡貼三個檔案的原始碼,第一個是main.java package com.example.test; import java.util.ArrayList; import java.util.List; import com.example.test.MyXZ; i

鼠標滾輪實現圖片的-------Day79

auto 生活 lis asc alt easy opera play log 今天是7月的最後一天了,不得不說,我定下的七月份剩余幾天的計劃是完不成了。一則工作確實緊了些,再則沒能處理好生活、工作和學習的節奏。這才是人生最大的課題吧。只是也還好。至少自己還在堅持著。事

Android -- 定義view實現keep歡迎頁倒計時效果

super onfinish -m use new getc awt ttr alt 1,最近打開keep的app的時候,發現它的歡迎頁面的倒計時效果還不錯,所以打算自己來寫寫,然後就有了這篇文章。 2,還是老規矩,先看一下我們今天實現的效果   相較於我們常見的倒計時

UWP:使用Behavior實現FlipView簡單效果

spl send 應該 code load isp start 個性 source 先上效果圖 首先安裝Behavior SDK:在Nuget中搜索安裝 Microsoft.Xaml.Behaviors.Uwp.Managed 。 然後新建類,AnimationFlipV

Android定義View——實現水波紋效果類似剩余流量球

string 三個點 pre ber block span 初始化 move 理解 最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪制一個正弦曲線(sin

Android定義processor實現bindView功能

lis dds 定義 java代碼 cli 註冊 文章 type() mage 一、簡介 在現階段的Android開發中,註解越來越流行起來,比如ButterKnife,Retrofit,Dragger,EventBus等等都選擇使用註解來配置。按照處理時期,註解又分為兩

定義toast實現

web javascript html5 toast ys_toast.css.ys-toast{ position:fixed; left:0; right:0; top:0; bottom:0; z-index: 999999; } .ys-toast>em{ pos

SpringVC 攔截器+定義註解 實現權限攔截

json.js 加載 bean media tar attr esp 權限 encoding 1.springmvc配置文件中配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w

定義ScrollView 實現上拉下拉的回彈效果--並且子控件中有Viewpager的情況

是否 AS abs pri tar utils lda animation ted onInterceptTouchEvent就是對子控件中Viewpager的處理:左右滑動應該讓viewpager消費 1 public class MyScrollView ext

[python]RobotFramework定義實現UI自動化

bubuko output source 自動 封裝 9.png 全局變量 詳細 變量 1.安裝教程 環境搭建不多說,網上資料一大堆,可參考https://www.cnblogs.com/puresoul/p/3854963.html,寫的比較詳細,值得推薦。目前pyt

NPOI+反射+定義特性實現上傳excel轉List及驗證

type set custom pre script private property xssf don 1.自定義特性 [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited

【Thumbnailator】java 使用Thumbnailator實現等比例圖片,旋轉圖片等【轉載】

strong class chm eight load angle true api ins Thumbnailator概述: Thumbnailator是與Java界面流暢的縮略圖生成庫。它簡化了通過提供一個API允許精細的縮略圖生成調整生產從現有的圖