123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- package com.xugame.gameconsole.dialog.gamemenu;
- import android.content.Context;
- import android.graphics.Color;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- import android.widget.Button;
- import android.widget.CompoundButton;
- import android.widget.LinearLayout;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- import android.widget.TextView;
- import android.widget.Toast;
- import androidx.annotation.NonNull;
- import com.xugame.gameconsole.R;
- import com.xugame.gameconsole.dialog.BaseDialog;
- import com.xugame.gameconsole.emulator.ScreenType;
- import com.xugame.gameconsole.util.DebugUtil;
- import java.util.HashMap;
- public class GameMenuDialog extends BaseDialog
- implements RadioGroup.OnCheckedChangeListener,
- View.OnClickListener {
- private static final String TAG = "GameMenuDialogTAG";
- private RadioGroup mRadioGroup;
- GameMenuDialogListener mListener;
- ScreenType mType = ScreenType.NORMAL;
- private TextView[] archiveTexts;
- private TextView[] readArchiveTexts;
- private Context mContext;
- private int mReadArchiveIndex = 0;//读取存档下标
- private LinearLayout mKeySettingBg;
- private Button mCommit;
- //UP/DOWN/LEFT/RIGHT/A/B/X/Y/L1/R1/L2/R2
- private String[] KEYNAMES = {
- "A",
- "X",
- "SELECT",
- "START",
- "UP",
- "DOWN",
- "LEFT",
- "RIGHT",
- "B",
- "Y",
- "L1",
- "R1",
- };
- private int[] KEYS = {
- KeyEvent.KEYCODE_J,
- KeyEvent.KEYCODE_L,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_W,
- KeyEvent.KEYCODE_S,
- KeyEvent.KEYCODE_A,
- KeyEvent.KEYCODE_D,
- KeyEvent.KEYCODE_K,
- KeyEvent.KEYCODE_U,
- KeyEvent.KEYCODE_I,
- KeyEvent.KEYCODE_O,
- };
- private Button mKeySwitch;
- private boolean isKeySettingRunning = false;
- private int keySettingIndex = 0;
- private RadioButton[] mKeyNumText;
- private TextView mKeyName;
- private RadioGroup mKeyRadioGroup;
- public GameMenuDialog(Context context, GameMenuDialogListener listener) {
- super(context, R.style.DialogNoPadding);
- this.mListener = listener;
- this.mContext = context;
- setContentView(R.layout.dialog_gamemenu_layout);
- Window window = this.getWindow();
- WindowManager.LayoutParams wLp = window.getAttributes();
- wLp.width = 1200;
- wLp.height = 832;
- wLp.dimAmount = 0.6f;//透明度
- window.setAttributes(wLp);
- this.initView();
- }
- private void initView() {
- mRadioGroup = findViewById(R.id.radio_gp_screen);
- mRadioGroup.setOnCheckedChangeListener(this);
- archiveTexts = new TextView[5];
- readArchiveTexts = new TextView[5];
- archiveTexts[0] = findViewById(R.id.archive_1);
- archiveTexts[1] = findViewById(R.id.archive_2);
- archiveTexts[2] = findViewById(R.id.archive_3);
- archiveTexts[3] = findViewById(R.id.archive_4);
- archiveTexts[4] = findViewById(R.id.archive_5);
- readArchiveTexts[0] = findViewById(R.id.read_archive_1);
- readArchiveTexts[1] = findViewById(R.id.read_archive_2);
- readArchiveTexts[2] = findViewById(R.id.read_archive_3);
- readArchiveTexts[3] = findViewById(R.id.read_archive_4);
- readArchiveTexts[4] = findViewById(R.id.read_archive_5);
- mKeySettingBg = findViewById(R.id.key_setting_bg);
- mKeySwitch = findViewById(R.id.key_setting_switch);
- mKeyName = findViewById(R.id.keyName);
- mCommit = findViewById(R.id.key_setting_commit);
- mKeyRadioGroup = findViewById(R.id.key_radio_grop);
- mKeySwitch.setOnClickListener(this);
- mKeyNumText = new RadioButton[KEYS.length];
- for (int i = 0; i < KEYS.length; i++) {
- RadioButton radioButton = new RadioButton(mContext);
- radioButton.setText(KEYNAMES[i]);
- radioButton.setTextColor(Color.BLACK);
- RadioGroup.LayoutParams llp = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,
- RadioGroup.LayoutParams.WRAP_CONTENT);
- llp.leftMargin = 10;
- mKeyRadioGroup.addView(radioButton, llp);
- final int index = i;
- radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- keySettingIndex = index;
- radioButton.setBackgroundColor(Color.GRAY);
- isKeySettingRunning = true;
- } else {
- radioButton.setBackgroundColor(Color.WHITE);
- }
- }
- });
- mKeyNumText[i] = radioButton;
- }
- //点击确定,上报新的按键
- mCommit.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- DebugUtil.i(TAG, "click commit");
- if (isKeySettingRunning) {
- Toast.makeText(mContext, "当前处于编辑状态", Toast.LENGTH_SHORT).show();
- return;
- } else {
- if (mListener != null)
- mListener.onKeySettingNums(KEYS);
- }
- }
- });
- for (int i = 0; i < archiveTexts.length; i++) {
- final int tempIndex = i;
- archiveTexts[i].setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (mListener != null && mListener.onSaveState(tempIndex))
- // todo: save state error handler
- ;
- dismiss();
- }
- });
- }
- for (int i = 0; i < readArchiveTexts.length; i++) {
- final int tempIndex = i;
- readArchiveTexts[i].setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- mReadArchiveIndex = tempIndex;
- if (mListener != null && mListener.onLoadState(tempIndex))
- // todo: load state error handler
- ;
- dismiss();
- }
- });
- }
- findViewById(R.id.ratioCoreButton).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null)
- mListener.onSetRatio(0);
- dismiss();
- }
- });
- findViewById(R.id.ratioFullscreenButton).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null)
- mListener.onSetRatio(1);
- dismiss();
- }
- });
- findViewById(R.id.ratioCustomButton).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null)
- mListener.onSetRatio(2);
- dismiss();
- }
- });
- findViewById(R.id.resume_game).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (mListener != null)
- mListener.onResumeGame(mType, mReadArchiveIndex);
- dismiss();
- }
- });
- findViewById(R.id.stop_game).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (mListener != null)
- mListener.onExitGame();
- dismiss();
- }
- });
- }
- @Override
- public void onCheckedChanged(RadioGroup radioGroup, int i) {
- if (radioGroup.getCheckedRadioButtonId() == R.id.normal) {
- mType = ScreenType.NORMAL;
- } else if (radioGroup.getCheckedRadioButtonId() == R.id.sai_2x) {
- mType = ScreenType.SAI_2X;
- } else if (radioGroup.getCheckedRadioButtonId() == R.id.scanline_game) {
- mType = ScreenType.SCANLINE;
- }
- }
- @Override
- public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
- if (isKeySettingRunning) {
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- int devicesID = event.getDeviceId();
- String devicesName = event.getDevice().getName();
- int keyCode = event.getKeyCode();
- mKeyName.setText("按键ID:" + devicesID + " 设备名:" + devicesName + " keycode:" + keyCode);
- if (keySettingIndex < KEYS.length) {
- boolean isSwap = false;//是否交换键值
- mKeyNumText[keySettingIndex].setBackgroundColor(Color.WHITE);
- for (int i = 0; i < KEYS.length; i++) {
- if (keyCode == KEYS[i] && keySettingIndex != i) {
- int temp = KEYS[keySettingIndex];
- KEYS[i] = temp;
- KEYS[keySettingIndex] = keyCode;
- isSwap = true;
- }
- }
- if (!isSwap)//没有相同键值则直接赋值
- KEYS[keySettingIndex] = keyCode;
- }
- isKeySettingRunning = false;
- String tempKeyStr = "";
- for (int i=0;i<KEYS.length;i++) {
- tempKeyStr += KEYS[i] + "-";
- }
- DebugUtil.i(TAG, "key=" + tempKeyStr);
- }
- return super.dispatchKeyEvent(event);
- } else {
- return super.dispatchKeyEvent(event);
- }
- }
- @Override
- public void dismiss() {
- if(mListener!=null){
- mListener.onResumeGame(mType, mReadArchiveIndex);
- }
- super.dismiss();
- }
- @Override
- public void onClick(View view) {
- if (view == mKeySwitch) {
- isKeySettingRunning = !isKeySettingRunning;
- mKeySwitch.setText((isKeySettingRunning != true ? "开始设置按键" : "停止设置按键"));
- }
- }
- }
|