Browse Source

Merge branch 'master' into czq

# Conflicts:
#	.idea/misc.xml
#	app/src/main/AndroidManifest.xml
czq 2 years ago
parent
commit
28e092e151

+ 0 - 3
.idea/misc.xml

@@ -25,9 +25,6 @@
         <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/activity_view.xml" value="0.25" />
         <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_device.xml" value="0.10190217391304347" />
-        <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/item_word_cut.xml" value="0.103125" />
-        <entry key="..\:/Progect/gitee/EffectDemo/app/src/main/res/layout/item_word_sound.xml" value="0.103125" />
       </map>
     </option>
   </component>

+ 0 - 2
app/src/main/AndroidManifest.xml

@@ -138,8 +138,6 @@
         <activity
             android:name=".activity.AudioActivity"
             android:screenOrientation="landscape" />
-        <activity android:name=".activity.NewSongLyricActivity"
-            />
     </application>
 
 </manifest>

+ 7 - 6
app/src/main/java/com/xunao/effectdemo/activity/MapChallengeActivity.java

@@ -43,12 +43,9 @@ public class MapChallengeActivity extends Activity {
     void initView(){
         btnMap1 = findViewById(R.id.btn_map_1);
         btnMap2 = findViewById(R.id.btn_map_2);
-        btnMap2.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                intent = new Intent(MapChallengeActivity.this, AudioActivity.class);
-                startActivity(intent);
-            }
+        btnMap2.setOnClickListener(v -> {
+            intent = new Intent(MapChallengeActivity.this, AudioActivity.class);
+            startActivity(intent);
         });
         btnMap3 = findViewById(R.id.btn_map_3);
         btnMap3.setOnClickListener(v -> {
@@ -62,6 +59,10 @@ public class MapChallengeActivity extends Activity {
             startActivity(intent);
         });
         btnMap6 = findViewById(R.id.btn_map_6);
+        btnMap6.setOnClickListener(v -> {
+            intent = new Intent(MapChallengeActivity.this, RolePlayActivity.class);
+            startActivity(intent);
+        });
 
     }
 

+ 155 - 0
app/src/main/java/com/xunao/effectdemo/activity/RolePlayActivity.java

@@ -0,0 +1,155 @@
+package com.xunao.effectdemo.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.SimpleItemAnimator;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.xunao.effectdemo.R;
+import com.xunao.effectdemo.adapter.RolePlayAdapter;
+import com.xunao.effectdemo.adapter.WordCutAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Random;
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class RolePlayActivity extends Activity {
+    private static final String TAG = "RolePlayActivity";
+
+    private Button btnStart;
+    private RecyclerView rvMarquee;
+    private RolePlayAdapter rolePlayAdapter;
+    private List<String> roleList = new ArrayList<>();
+
+    // 跑马灯
+    private boolean isGameRunning = false; //是否处于转动
+    private boolean isTryToStop = false;//是否增速/减速
+
+    private int currentTotal = 0;
+
+    private static final int DEFAULT_SPEED = 150; //默认/最慢速度
+    private static final int MIN_SPEED = 50;//最快速度
+    private int currentSpeed = DEFAULT_SPEED;//当前速度
+
+    Timer timer = new Timer();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_role_play);
+        initView();
+    }
+
+    private void initView(){
+        btnStart = findViewById(R.id.btn_start);
+        btnStart.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                int stayIndex = new Random().nextInt(6);
+                Log.i(TAG, "stayIndex:" + stayIndex);
+                startGame(stayIndex);
+            }
+        });
+        rvMarquee = findViewById(R.id.rv_marquee);
+        ((SimpleItemAnimator) Objects.requireNonNull(rvMarquee.getItemAnimator())).setSupportsChangeAnimations(false);
+
+        // 设置横向布局
+        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false){
+            @Override
+            public boolean canScrollHorizontally() {
+                return false;
+            }
+        };
+        rvMarquee.setLayoutManager(linearLayoutManager);
+
+        roleList.add("角色1");
+        roleList.add("角色2");
+        roleList.add("角色3");
+        roleList.add("角色4");
+        roleList.add("角色5");
+        roleList.add("角色6");
+
+        rolePlayAdapter = new RolePlayAdapter(roleList, this);
+        rvMarquee.setAdapter(rolePlayAdapter);
+    }
+
+    //开始抽奖
+    public void startGame(final int stayIndex) {
+        if (isGameRunning) {  //运动中
+            return;
+        }
+        isGameRunning = true;
+        isTryToStop = false;
+        currentSpeed = DEFAULT_SPEED;
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                while (isGameRunning) {
+                    try {
+                        Thread.sleep(getInterruptTime());
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+
+                    // 防止线程多走了一次
+                    if (!isGameRunning) {
+                        return;
+                    }
+                    // 改变高亮项的索引
+                    runOnUiThread(() -> rolePlayAdapter.changeIndex());
+                    Log.i(TAG, "到" + roleList.get(rolePlayAdapter.getCurrentIndex()) + "--" + rolePlayAdapter.getCurrentIndex());
+
+                    //减速&&速度达到最小&&当前view为指定view——停止
+                    if (isTryToStop && currentSpeed == DEFAULT_SPEED && stayIndex == rolePlayAdapter.getCurrentIndex()) {
+                        isGameRunning = false;
+                        Log.i(TAG, "结束:角色为" + roleList.get(rolePlayAdapter.getCurrentIndex()) + "--" + rolePlayAdapter.getCurrentIndex());
+//                        listener.onShop(currentIndex);
+                    }
+                }
+            }
+        }).start();
+
+        //五秒后开始减速
+        timer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                tryToStop();
+            }
+        }, 5000);
+    }
+
+    //改变加速状态
+    public void tryToStop() {
+        isTryToStop = true;
+    }
+
+    //获取sleep时间,即转盘运动速度,越小即越快。
+    private long getInterruptTime() {
+        currentTotal++;
+        if (isTryToStop) {//减速直至恢复为默认速度
+            currentSpeed += 10;
+            if (currentSpeed > DEFAULT_SPEED) {
+                currentSpeed = DEFAULT_SPEED;
+            }
+        } else {//增速直至最快速度
+            //第一圈不做加速
+            if (currentTotal / roleList.size() > 0) {
+                currentSpeed -= 10;
+            }
+            if (currentSpeed < MIN_SPEED) {
+                currentSpeed = MIN_SPEED;
+            }
+        }
+        return currentSpeed;
+    }
+}

+ 81 - 0
app/src/main/java/com/xunao/effectdemo/adapter/RolePlayAdapter.java

@@ -0,0 +1,81 @@
+package com.xunao.effectdemo.adapter;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.core.content.res.ResourcesCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.xunao.effectdemo.R;
+
+import java.util.List;
+
+public class RolePlayAdapter extends RecyclerView.Adapter<RolePlayAdapter.ViewHolder> {
+    private List<String> roleList;
+    private final Context context;
+    private int currentIndex = 0;
+
+    public RolePlayAdapter(List<String> mList, Context context) {
+        this.currentIndex = currentIndex;
+        this.roleList = mList;
+        this.context = context;
+    }
+
+    @NonNull
+    @Override
+    public RolePlayAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+        View view = LayoutInflater.from(viewGroup.getContext())
+                .inflate(R.layout.item_role,viewGroup,false);
+        ViewHolder holder = new ViewHolder(view);
+        return holder;
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RolePlayAdapter.ViewHolder viewHolder, int i) {
+        String data = roleList.get(i);
+        viewHolder.tvRoleName.setText(data);
+        if(currentIndex == i){
+            viewHolder.llRole.setBackground(ResourcesCompat.getDrawable(context.getResources(),R.drawable.role_border_yellow_bg,null));
+        }else{
+            viewHolder.llRole.setBackground(ResourcesCompat.getDrawable(context.getResources(),R.drawable.role_bg,null));
+        }
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return roleList.isEmpty() ? 0 : roleList.size();
+    }
+
+
+    public static class ViewHolder extends RecyclerView.ViewHolder {
+
+        private TextView tvRoleName;
+        private LinearLayout llRole;
+
+        public ViewHolder(@NonNull View itemView) {
+            super(itemView);
+            tvRoleName = itemView.findViewById(R.id.tv_role_name);
+            llRole = itemView.findViewById(R.id.ll_role);
+        }
+    }
+
+    public void changeIndex(){
+        currentIndex = currentIndex + 1;
+        if (currentIndex >= roleList.size()) {
+            currentIndex = 0;
+        }
+        notifyItemRangeChanged(0, roleList.size());
+    }
+
+    public int getCurrentIndex(){
+        return currentIndex;
+    }
+}

+ 5 - 0
app/src/main/res/drawable/role_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/qmui_btn_blue_bg" />
+    <corners android:radius="4dp" />
+</shape>

+ 6 - 0
app/src/main/res/drawable/role_border_yellow_bg.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/qmui_btn_blue_bg" />
+    <stroke android:width="3dp" android:color="@color/shadow_dark_color"/>
+    <corners android:radius="4dp" />
+</shape>

+ 18 - 0
app/src/main/res/layout/activity_role_play.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout 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:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".activity.RolePlayActivity">
+    <Button
+        android:id="@+id/btn_start"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="模拟视频播放结束"/>
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_marquee"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"/>
+</RelativeLayout>

+ 16 - 0
app/src/main/res/layout/item_role.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="120dp"
+    android:layout_height="160dp"
+    android:id="@+id/ll_role"
+    android:layout_marginHorizontal="20dp"
+    android:background="@drawable/role_bg"
+    android:orientation="horizontal"
+    android:gravity="center">
+    <TextView
+        android:id="@+id/tv_role_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="20sp"
+        android:textColor="@color/exo_white"/>
+</LinearLayout>