浏览代码

1,添加了视频大小变化的函数
2,增加了一些注释

lyn 5 年之前
父节点
当前提交
6ab566d381

+ 0 - 1
app/src/main/java/com/haochuan/hciptvbasic/BaseWebActivity.java

@@ -157,7 +157,6 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
             @Override
             public void onDestroy() {
-                playerToJS.onPlayerDestroy();
             }
 
             @Override

+ 10 - 6
app/src/main/java/com/haochuan/hciptvbasic/test/TestActivity.java

@@ -28,13 +28,17 @@ public class TestActivity extends BaseWebActivity {
         Button playBtn = findViewById(R.id.play_btn);
         playBtn.setOnClickListener(v -> {
             String url = "https://gzhc-sxrj.oss-cn-shenzhen.aliyuncs.com/gzhc-djbl/djbl01.mp4";
-            String x = "0";
-            String y = "0";
-            String width = "1280";
-            String height = "720";
+            String x = "20";
+            String y = "30";
+            String width = "640";
+            String height = "360";
             getPlayerToJS().play(url,"20",x,y,width,height);
         });
 
+        Button changeBtn = findViewById(R.id.change_btn);
+        changeBtn.setOnClickListener(v ->
+                getPlayerToJS().change("0","0","1280","720"));
+
         Button pauseBtn = findViewById(R.id.pause_btn);
         pauseBtn.setOnClickListener(v -> getPlayerToJS().pause());
 
@@ -68,11 +72,11 @@ public class TestActivity extends BaseWebActivity {
         /*String intentJson = new ToolToJS(this,getWebView()).getIntentJson();
         Logger.d("intentJson:" + intentJson);*/
 
-        ToolToJS toolToJS = new ToolToJS(this,getWebView());
+       /* ToolToJS toolToJS = new ToolToJS(this,getWebView());
         String url = "http://117.169.11.222:8018/tv/index.php";
         String paramJson = "{\"m\":\"Home\",\"c\":\"Activity\",\"a\":\"getActStatus\"}";
         String headJson = "{\"cookie\":\"head=123123123131fdfsfsdfs\"}";
-        toolToJS.clientWebRequest(url,paramJson,headJson,2,false,"test");
+        toolToJS.clientWebRequest(url,paramJson,headJson,2,false,"test");*/
         //toolToJS.download("http://202.99.114.74:56251/dudu_youxi/h5/gameList/apk/jiSuKuangBiao.apk");
     }
 

+ 89 - 10
app/src/main/java/com/haochuan/hciptvbasic/webview/PlayerToJS.java

@@ -1,8 +1,12 @@
 package com.haochuan.hciptvbasic.webview;
 
+import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.view.ViewGroup;
+import android.view.animation.LinearInterpolator;
 import android.webkit.JavascriptInterface;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
@@ -25,7 +29,6 @@ public class PlayerToJS {
     String JS_EVENT_PLAYING = "javascript:onPlayerPlaying()";
     String JS_EVENT_RESUME = "javascript:onPlayerResume()";
     String JS_EVENT_PAUSE = "javascript:onPlayerPause()";
-    String JS_EVENT_DESTROY="javascript:onPlayerDestroy()";
     String JS_EVENT_PLAYINGBUFFER = "javascript:onPlayingBuffer()";
     String JS_EVENT_COMPLETE = "javascript:onPlayerComplete()";
     String JS_EVENT_PLAYERROR="javascript:onPlayerError(%s,%s)";
@@ -68,12 +71,7 @@ public class PlayerToJS {
         JsUtil.evaluateJavascript(context,webView,JS_EVENT_PAUSE);
     }
 
-    /*
-     * 播放器销毁释放事件
-     * */
-    public void onPlayerDestroy(){
-        JsUtil.evaluateJavascript(context,webView,JS_EVENT_DESTROY);
-    }
+
 
     /*
      * 播放器缓冲事件
@@ -100,6 +98,11 @@ public class PlayerToJS {
 
     /*
     * 播放函数
+     * @param x                  播放器x坐标
+     * @param y                  播放器y坐标
+     * @param width              播放器宽度
+     * @param height             播放器高度
+     * @param seekTime           播放初始位置,单位 s
     * */
     @JavascriptInterface
     public void play(String url,String seekTime, String x,String y,String width, String height){
@@ -107,6 +110,15 @@ public class PlayerToJS {
     }
 
     /*
+    * 改变播放器尺寸
+    * */
+    @JavascriptInterface
+    public void change(String x,String y,String width, String height){
+        videoChange(x,y,width,height);
+    }
+
+
+    /*
      * 暂停
      * */
     @JavascriptInterface
@@ -172,6 +184,11 @@ public class PlayerToJS {
 
     /*
     * 播放
+    * @param x                  播放器x坐标
+    * @param y                  播放器y坐标
+    * @param width              播放器宽度
+    * @param height             播放器高度
+    * @param seekTime           播放初始位置,单位 s
     * */
     private void videoPlay(String url,String seekTime, String x,String y,String width, String height){
         if(baseMediaPlayer == null){
@@ -203,10 +220,10 @@ public class PlayerToJS {
                 baseMediaPlayer.setStartTime(realSeekTime);
                 webView.requestFocus();
             });
+        }else{
+            Logger.w(String.format("请正确传递play函数参数:x:%s;y:%s;width:%s;height:%s;seekTime:%s",
+                    x,y,width,height,seekTime));
         }
-
-
-
     }
 
 
@@ -237,6 +254,68 @@ public class PlayerToJS {
         }
     }
 
+    /*
+     * @param x                  待改变播放器x坐标
+     * @param y                  待改变播放器y坐标
+     * @param width              待改变播放器宽度
+     * @param height             待改变播放器高度
+    * */
+    private void videoChange(String x,String y,String width, String height){
+        if(baseMediaPlayer == null){
+            Logger.w("baseMediaPlayer is null,不能调用play函数");
+        }
+
+        if(baseMediaPlayer.getParent() == null){
+            Logger.w("当前播放器没有启动,请先调用play函数启动");
+            return;
+        }
+
+        if(MathUtil.isDigitsOnly(x) && MathUtil.isDigitsOnly(y) && MathUtil.isDigitsOnly(width) && MathUtil.isDigitsOnly(height)){
+            int screenWidth = ScreenSnap.getScreenWidth(context);
+            int screenHeight = ScreenSnap.getScreenHeight(context);
+            int toX = (int) (Float.parseFloat(x) * screenWidth / 1280);
+            int toY = (int) (Float.parseFloat(y) * screenHeight / 720);
+            int toWidth = (int) (Float.parseFloat(width) * screenWidth / 1280);
+            int toHeight = (int) (Float.parseFloat(height) * screenHeight / 720);
+
+            int fromX = (int)baseMediaPlayer.getX();
+            int fromY = (int)baseMediaPlayer.getY();
+            int fromWidth = baseMediaPlayer.getWidth();
+            int fromHeight = baseMediaPlayer.getHeight();
+            animChanged(fromX,toX,fromY,toY,fromWidth,toWidth,fromHeight,toHeight);
+        }else{
+            Logger.w(String.format("请正确传递change函数参数:x:%s;y:%s;width:%s;height:%s",
+                    x,y,width,height));
+        }
+
+    }
+
+    /*
+    * 以动画形式改变播放器尺寸
+    * */
+    private void animChanged(int fromX, int toX, int fromY, int toY, int fromWidth, int toWidth, int fromHeight, int toHeight) {
+        ValueAnimator animator = new ValueAnimator();
+        animator.setValues(
+                PropertyValuesHolder.ofFloat("x", fromX, toX),
+                PropertyValuesHolder.ofFloat("y", fromY, toY),
+                PropertyValuesHolder.ofInt("width", fromWidth, toWidth),
+                PropertyValuesHolder.ofInt("height", fromHeight, toHeight)
+        );
+        animator.setDuration(200);
+        animator.setInterpolator(new LinearInterpolator());
+        animator.addUpdateListener(valueAnimator -> {
+            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+            params.width = (int) valueAnimator.getAnimatedValue("width");
+            params.height = (int) valueAnimator.getAnimatedValue("height");
+
+            baseMediaPlayer.setLayoutParams(params);
+
+            baseMediaPlayer.setX((Float) valueAnimator.getAnimatedValue("x"));
+            baseMediaPlayer.setY((Float) valueAnimator.getAnimatedValue("y"));
+        });
+        animator.start();
+    }
+
 
     private void destroyVideo(){
         if(baseMediaPlayer != null && baseMediaPlayer.getParent() != null){

+ 5 - 7
app/src/main/java/com/haochuan/hciptvbasic/webview/ToolToJS.java

@@ -31,7 +31,7 @@ public class ToolToJS {
     String JS_EVENT_LOG = "javascript:onLog('%s')";
 
     //将response传递给js
-    String JS_EVENT_RESPONSE ="javascript:onWebRequestResponse('%s','%s')";
+    String JS_EVENT_RESPONSE ="javascript:onWebRequestResponse('%s','%s','%s')";
 
     //开始下载事件
     String JS_EVENT_DOWNLOAD_START = "javascript:onDownloadStart()";
@@ -113,7 +113,7 @@ public class ToolToJS {
      * **/
     @JavascriptInterface
     public int checkAppInstalled(String packageName){
-        return toolsUtil.checkSubAppInstalled(context,packageName)?1:-1;
+        return toolsUtil.checkSubAppInstalled(context,packageName)?0:-1;
     }
 
 
@@ -194,11 +194,9 @@ public class ToolToJS {
     public void clientWebRequest(String url,String paramJson,String headJson,int method,boolean ignoreResult,String tag){
         toolsUtil.clientWebRequest(context, url, paramJson, headJson, method, ignoreResult, tag,
                 (int what,String response,String tag1)->{
-                        if(what == 0){
-                            Logger.d(String.format("response:%s;tag:%s",response,tag1));
-                            JsUtil.evaluateJavascript(context,webView,
-                                    String.format(JS_EVENT_RESPONSE,response,tag1));
-                        }
+                    Logger.d(String.format("what:%s,response:%s;tag:%s",response,tag1));
+                    JsUtil.evaluateJavascript(context,webView,
+                            String.format(JS_EVENT_RESPONSE,what,response,tag1));
                 });
     }
 

+ 6 - 0
app/src/main/res/layout/activity_test.xml

@@ -24,6 +24,12 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
+            android:text="改变尺寸"
+            android:id="@+id/change_btn"/>
+        <Button
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
             android:layout_marginTop="8dp"
             android:text="暂停"
             android:id="@+id/pause_btn"/>