4 Achegas 541b6c10ac ... 6762062546

Autor SHA1 Mensaxe Data
  czq 6762062546 单词泛红控件修改完成;视频控件修改拖动逻辑 %!s(int64=2) %!d(string=hai) anos
  czq 44d59860d3 Merge branch 'master' into czq %!s(int64=2) %!d(string=hai) anos
  czq e2710a8f89 单词泛红控件修改 %!s(int64=2) %!d(string=hai) anos
  LAPTOP-K69FCNBP\crius 48754abcf8 地图 %!s(int64=2) %!d(string=hai) anos

+ 1 - 0
.idea/misc.xml

@@ -26,6 +26,7 @@
         <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/activity_web.xml" value="0.1816123188405797" />
         <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/demo_activity.xml" value="0.18020833333333333" />
         <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/item_word_sound.xml" value="0.10190217391304347" />
+        <entry key="..\:/work/mozhi/qiqu/EffectDemo/app/src/main/res/layout/activity_map_challenge.xml" value="0.36886005560704355" />
       </map>
     </option>
   </component>

+ 1 - 0
app/build.gradle

@@ -132,6 +132,7 @@ dependencies {
     implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
     implementation 'com.airbnb.android:lottie:5.2.0'
     implementation 'com.github.JadeKkang:like_view:v1.0'
+    implementation 'com.github.bumptech.glide:glide:4.13.2'
     //极光推送
     implementation 'cn.jiguang.sdk:jcore:3.3.0'  // 此处以JCore 3.3.0 版本为例。
     implementation 'cn.jiguang.sdk:jpush:4.7.2'  // 此处以JPush 4.7.2 版本为例

+ 72 - 4
app/src/main/java/com/xunao/effectdemo/activity/MapChallengeActivity.java

@@ -1,20 +1,29 @@
 package com.xunao.effectdemo.activity;
 
-import androidx.appcompat.app.AppCompatActivity;
+import static com.blankj.utilcode.util.ScreenUtils.getScreenHeight;
+import static com.blankj.utilcode.util.ScreenUtils.getScreenWidth;
 
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
+import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.HorizontalScrollView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DecodeFormat;
 import com.xunao.effectdemo.R;
+import com.xunao.effectdemo.bean.MapBean;
+import com.xunao.effectdemo.bean.MapBean.ResultBean.ListBean.StepsBean;
 import com.xunao.effectdemo.net.ApiHttpClient;
 import com.xunao.effectdemo.net.ApiUrl;
 import com.xunao.effectdemo.net.CSMHttpCallback;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -32,15 +41,27 @@ public class MapChallengeActivity extends Activity {
     private String maps_id = "185";
     private String student_id = "180721";
 
+    private List<String> bkg_images;
+    private LinearLayout llMapBg;
+    private RelativeLayout rlMapBg;
+    private HorizontalScrollView scrollView;
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_map_challenge);
         initView();
+        initData();
+    }
+
+    void initData(){
+        getMap();
     }
 
     void initView(){
+        llMapBg = findViewById(R.id.ll_map_bg);
+        rlMapBg = findViewById(R.id.rl_map_bg);
         btnMap1 = findViewById(R.id.btn_map_1);
         btnMap2 = findViewById(R.id.btn_map_2);
         btnMap2.setOnClickListener(v -> {
@@ -87,6 +108,45 @@ public class MapChallengeActivity extends Activity {
         });
     }
 
+    private void addBigBg(String url){
+        ImageView child = new ImageView(this);
+//        Glide.with(this).asBitmap().load(url).into(new BitmapImageViewTarget(child){
+//            @Override
+//            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+//                child.setLayoutParams(new LinearLayout.LayoutParams(getScreenHeight()* resource.getWidth()/resource.getHeight(),getScreenHeight()));
+//                child.setImageBitmap(resource);
+//            }
+//        });
+        Glide.with(this)
+                .load(url)
+                .format(DecodeFormat.PREFER_RGB_565)
+                .into(child);
+        child.setScaleType(ImageView.ScaleType.FIT_XY);
+        child.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,getScreenHeight()));
+        llMapBg.addView(child);
+    }
+
+    private void addSmallBg(String url, double x, double y){
+        ImageView child = new ImageView(this);
+//        Glide.with(this).asBitmap().load(url).into(new BitmapImageViewTarget(child){
+//            @Override
+//            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+//                child.setLayoutParams(new LinearLayout.LayoutParams(getScreenHeight()* resource.getWidth()/resource.getHeight(),getScreenHeight()));
+//                child.setImageBitmap(resource);
+//            }
+//        });
+        Glide.with(this)
+                .load(url)
+                .format(DecodeFormat.PREFER_RGB_565)
+                .into(child);
+        child.setScaleType(ImageView.ScaleType.FIT_XY);
+        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(360,300);
+        layoutParams.leftMargin = (int)(x * getScreenWidth()*11);
+        layoutParams.topMargin = (int)(y * getScreenHeight());
+        child.setLayoutParams(layoutParams);
+        rlMapBg.addView(child);
+    }
+
     void getMap(){
         Map<String, String> params = new HashMap<>();
         params.put("member_id",member_id);
@@ -96,7 +156,15 @@ public class MapChallengeActivity extends Activity {
         ApiHttpClient.get(ApiUrl.getMap,params, new CSMHttpCallback() {
             @Override
             protected void onSuccess(String jsonStr) {
-
+                MapBean mapBean = MapBean.parse(jsonStr);
+                bkg_images = mapBean.getResult().getList().getBkg_images();
+                for(String url : bkg_images){
+                   addBigBg(url);
+                }
+                List<StepsBean> stepsBeans = mapBean.getResult().getList().getSteps();
+                for(StepsBean stepsBean : stepsBeans){
+                    addSmallBg(stepsBean.getImage(), stepsBean.getCoordinate().getX(), stepsBean.getCoordinate().getY());
+                }
             }
 
             @Override

+ 22 - 10
app/src/main/java/com/xunao/effectdemo/activity/NewSongLyricActivity.java

@@ -123,7 +123,11 @@ public class NewSongLyricActivity extends Activity {
 				setWord(wordList);
 
 				mediaPlayer.setOnPreparedListener(mp -> Log.i(TAG,"onPrepared:准备完成"));
-				mediaPlayer.setOnCompletionListener(mp -> Log.i(TAG,"OnCompletion:播放完成"));
+				mediaPlayer.setOnCompletionListener(mp -> {
+					textView.release();
+					handler.removeCallbacks(runnable);
+					playFinish();
+				});
 				try {
 					mediaPlayer.setDataSource(mediaBean.getResult().getList().getSteps_mp3url());
 					mediaPlayer.prepareAsync();// 开始在后台缓冲音频文件并返回
@@ -180,15 +184,7 @@ public class NewSongLyricActivity extends Activity {
 						if (num==beanList.size()){
 							num = 0;
 						}
-						if (timeBean.getTime()+timeBean.getStartTime()+canTime == timeBean.getEndTime()){
-							canTime =0;
-							normal = startIndex;
 
-						}else{
-							if (canTime==0){
-							}
-							canTime +=timeBean.getTime();
-						}
 
 						textView.startPlayLine(
 								startIndex,
@@ -196,7 +192,15 @@ public class NewSongLyricActivity extends Activity {
 								normal,1);
 						startIndex += timeBean.getWord().length();
 
-
+						if (timeBean.getTime()+timeBean.getStartTime()+canTime == timeBean.getEndTime()){
+							canTime =0;
+							normal = startIndex ;
+							Log.e("MyTag","结束标志:"+normal);
+						}else{
+							if (canTime==0){
+							}
+							canTime +=timeBean.getTime();
+						}
 						timeBean = beanList.get(num);
 					}
 					break;
@@ -211,6 +215,14 @@ public class NewSongLyricActivity extends Activity {
 		handler.post(runnable);
 	}
 
+	private void playFinish(){
+		time = 0;
+		startIndex = 0;
+		num = 0;
+		canTime = 0;
+		normal = 0;
+	}
+
 
 	Timer timer;
 	int time = 0;

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 18 - 0
app/src/main/java/com/xunao/effectdemo/bean/MapBean.java


+ 29 - 10
app/src/main/java/com/xunao/effectdemo/view/SongLyricTextView.kt

@@ -6,6 +6,7 @@ import android.graphics.Canvas
 import android.graphics.Color
 import android.graphics.Path
 import android.util.AttributeSet
+import android.util.Log
 import android.view.animation.LinearInterpolator
 
 /**
@@ -34,6 +35,8 @@ class SongLyricTextView @JvmOverloads constructor(
      * */
     private var consumeWidth: Float = 0f
 
+    private var normalWidth:Float = 0f;
+
     /**
      * 是否正在播放中
      * */
@@ -56,6 +59,7 @@ class SongLyricTextView @JvmOverloads constructor(
         animator.interpolator = LinearInterpolator()
         animator.addUpdateListener {
             consumeWidth = it.animatedValue as Float
+            normalWidth = oldStartWidth
             invalidate()
         }
         animator
@@ -74,27 +78,32 @@ class SongLyricTextView @JvmOverloads constructor(
             path.reset()
             val lineCount = layout.lineCount
             val content = text.toString()
+
             for (i in 0 until lineCount) {
                 // 计算一行文字的宽度
                 val lineWidth = mPaint.measureText(
                     content.substring(layout.getLineStart(i), layout.getLineEnd(i))
                 )
-
-                if (lineWidth <= consumeWidth) {
+                if (lineWidth < consumeWidth) {
                     // 如果是之前已经变色区域,直接添加到path中
+                    if (normalWidth<lineWidth&&normalWidth>0){
+                        path.addRect(
+                            layout.getLineLeft(i)+normalWidth,
+                            layout.getLineTop(i).toFloat(),
+                            layout.getLineRight(i),
+                            layout.getLineBottom(i).toFloat(),
+                            Path.Direction.CCW
+                        )
+                        normalWidth = 0f;
+                    }
                     consumeWidth -= lineWidth
-//                    path.addRect(
-//                        layout.getLineLeft(i),
-//                        layout.getLineTop(i).toFloat(),
-//                        layout.getLineRight(i),
-//                        layout.getLineBottom(i).toFloat(),
-//                        Path.Direction.CCW
-//                    )
+                    if (normalWidth>0f)normalWidth -= lineWidth
+//                    if(oldStartWidth<0f) oldStartWidth = 0f
                 } else {
                     // 如果该行正好是要变色的行,直接改变颜色
                     // 把需要的consumeWidth放入path中
                     path.addRect(
-                        layout.getLineLeft(i),
+                        layout.getLineLeft(i)+normalWidth,
                         layout.getLineTop(i).toFloat(),
                         layout.getLineLeft(i) + consumeWidth,
                         layout.getLineBottom(i).toFloat(),
@@ -201,4 +210,14 @@ class SongLyricTextView @JvmOverloads constructor(
 //        invalidate()
     }
 
+    /**
+     * 重置
+     */
+    fun release(){
+        isPlaying = false
+        isNormal = false
+        animator.cancel()
+        invalidate()
+    }
+
 }

+ 2 - 2
app/src/main/java/com/xunao/effectdemo/view/VideoPreviewPlay.java

@@ -183,9 +183,9 @@ public class VideoPreviewPlay extends StandardGSYVideoPlayer {
 		mProgressBar.setOnTouchListener(new OnTouchListener() {
 			@Override
 			public boolean onTouch(View view, MotionEvent motionEvent) {
-				if(isFinish){
+				if(!isFinish){
 					soundPoolUtil.playSoundWithRedId(R.raw.buyao);
-					Toast toast = Toast.makeText(context,"触摸事件",Toast.LENGTH_SHORT);
+					Toast toast = Toast.makeText(context,"禁止拖动",Toast.LENGTH_SHORT);
 					toast.setGravity(Gravity.TOP,0,0);
 					toast.show();
 					return true;

+ 48 - 32
app/src/main/res/layout/activity_map_challenge.xml

@@ -1,43 +1,59 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/scroll_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+<RelativeLayout
+    android:id="@+id/rl_map_bg"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="center"
     tools:context=".activity.MapChallengeActivity"
     android:orientation="horizontal">
-
-    <Button
-        android:id="@+id/btn_map_1"
-        android:text="视频播放"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-    <Button
-        android:id="@+id/btn_map_2"
-        android:text="点图发声"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-    <Button
-        android:id="@+id/btn_map_3"
-        android:text="视频点播"
+        <LinearLayout
+            android:id="@+id/ll_map_bg"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="horizontal" />
+    <LinearLayout
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-    <Button
-        android:id="@+id/btn_map_4"
-        android:text="选择题"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-    <Button
-        android:id="@+id/btn_map_5"
-        android:text="文字泛红"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-    <Button
-        android:id="@+id/btn_map_6"
-        android:text="角色扮演"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        android:layout_height="wrap_content">
+        <Button
+            android:id="@+id/btn_map_1"
+            android:text="视频播放"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+        <Button
+            android:id="@+id/btn_map_2"
+            android:text="点图发声"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+        <Button
+            android:id="@+id/btn_map_3"
+            android:text="视频点播"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+        <Button
+            android:id="@+id/btn_map_4"
+            android:text="选择题"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+        <Button
+            android:id="@+id/btn_map_5"
+            android:text="文字泛红"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+        <Button
+            android:id="@+id/btn_map_6"
+            android:text="角色扮演"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+    </LinearLayout>
+
 
+</RelativeLayout>
 
-</LinearLayout>
+</HorizontalScrollView>

+ 2 - 1
app/src/main/res/layout/activity_songe.xml

@@ -41,10 +41,11 @@
         android:id="@+id/end"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="结束播放" />
+        android:text="暂停播放" />
 
     <Button
         android:id="@+id/test"
+        android:visibility="gone"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="测试数据" />

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio