为了账号安全,请及时绑定邮箱和手机立即绑定

老师,我完全按照你的代码写的,为什么点击按钮后,没有出现视频中讲解的效果,待选框文字不能被隐藏,已选框没有文字的显示。。。。。。。。。

正在回答

代码语言

4 回答

初步判断是你没有注册按键的监听,你看下onCreate中是否调用了如下代码:

        // 注册监听器

        mMyGridView.registOnWordButtonClick(this);


0 回复 有任何疑惑可以回复我~
#1

Sawano

老师你好 我也是同样的问题 按键监听先前没注册 现在注册了 也是一样
2016-03-02 回复 有任何疑惑可以回复我~

把你的代码贴上来,肯定是代码哪里有问题

0 回复 有任何疑惑可以回复我~

这是第7讲的代码,麻烦老师帮我看下



package com.imooc.guessmusic.ui;


import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Random;


import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

import android.view.animation.Animation;

import android.view.animation.Animation.AnimationListener;

import android.view.animation.AnimationUtils;

import android.view.animation.LinearInterpolator;

import android.widget.Button;

import android.widget.ImageButton;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

import android.widget.Toast;


import com.imooc.guessmusic.R;

import com.imooc.guessmusic.data.Const;

import com.imooc.guessmusic.model.IWordButtonClickListener;

import com.imooc.guessmusic.model.Song;

import com.imooc.guessmusic.model.WordButton;

import com.imooc.guessmusic.myui.MyGridView;

import com.imooc.guessmusic.util.MyLog;

import com.imooc.guessmusic.util.Util;


public class MainActivity extends Activity

implements IWordButtonClickListener{

public final static String TAG="MainActivity";


// 唱片相关动画

private Animation mPanAnim;

private LinearInterpolator mPanLin;


private Animation mBarInAnim;

private LinearInterpolator mBarInLin;


private Animation mBarOutAnim;

private LinearInterpolator mBarOutLin;


// 唱片控件

private ImageView mViewPan;

// 拨杆控件

private ImageView mViewPanBar;


// Play 按键事件

private ImageButton mBtnPlayStart;


// 当前动画是否正在运行

private boolean mIsRunning = false;


// 文字框容器

private ArrayList<WordButton> mAllWords;

//已选框

private ArrayList<WordButton> mBtnSelectWords;


private MyGridView mMyGridView;

// 已选择文字框UI容器

private LinearLayout mViewWordsContainer;

//当前的歌曲

private Song mCurrentSong;

//当前的索引

private int mCurrentStageIndex =-1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


// 初始化控件

mViewPan = (ImageView)findViewById(R.id.imageView1);

mViewPanBar = (ImageView)findViewById(R.id.imageView2);


mMyGridView = (MyGridView)findViewById(R.id.gridview);

//注册监听

mMyGridView.registOnWordButtonClick(this);


mViewWordsContainer = (LinearLayout)findViewById(R.id.word_select_container);


// 初始化动画

mPanAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);

mPanLin = new LinearInterpolator();

mPanAnim.setInterpolator(mPanLin);

mPanAnim.setAnimationListener(new AnimationListener() {


@Override

public void onAnimationStart(Animation animation) {


}


@Override

public void onAnimationEnd(Animation animation) {

// 开启拨杆退出动画

mViewPanBar.setAnimation(mBarOutAnim);

}


@Override

public void onAnimationRepeat(Animation animation) {


}

});


mBarInAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_45);

mBarInLin = new LinearInterpolator();

mBarInAnim.setFillAfter(true);

mBarInAnim.setInterpolator(mBarInLin);

mBarInAnim.setAnimationListener(new AnimationListener() {


@Override

public void onAnimationStart(Animation animation) {


}


@Override

public void onAnimationEnd(Animation animation) {

// 开始唱片动画

mViewPan.startAnimation(mPanAnim);

}


@Override

public void onAnimationRepeat(Animation animation) {


}

});


mBarOutAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_d_45);

mBarOutLin = new LinearInterpolator();

mBarOutAnim.setFillAfter(true);

mBarOutAnim.setInterpolator(mBarOutLin);

mBarOutAnim.setAnimationListener(new AnimationListener() {


@Override

public void onAnimationStart(Animation animation) {


}


@Override

public void onAnimationEnd(Animation animation) {

// 整套动画播放完毕

mIsRunning = false;

mBtnPlayStart.setVisibility(View.VISIBLE);

}


@Override

public void onAnimationRepeat(Animation animation) {


}

});


mBtnPlayStart = (ImageButton)findViewById(R.id.btn_play_start);

mBtnPlayStart.setOnClickListener(new View.OnClickListener() {


@Override

public void onClick(View view) {

handlePlayButton();

}

});


// 初始化游戏数据

initCurrentStageData();

}


/**

* 处理圆盘中间的播放按钮,就是开始播放音乐

*/

private void handlePlayButton() {

if (mViewPanBar != null) {

if (!mIsRunning) {

mIsRunning = true;


// 开始拨杆进入动画

mViewPanBar.startAnimation(mBarInAnim);

mBtnPlayStart.setVisibility(View.INVISIBLE);

}

}

}


@Override

public void onPause() {

mViewPan.clearAnimation();


super.onPause();

}


//读取当前关的歌曲信息

private Song loadStageSongInfo(int stageIndex){

Song song=new Song();

String [] stage=Const.SONG_INFO[stageIndex];

song.setSongFileName(stage[Const.INDEX_FILE_NAME]);

song.setSongName(stage[Const.INDEX_SONG_NAME]);

return song;

}

private void initCurrentStageData() {

//读取当前关的歌曲信息

mCurrentSong=loadStageSongInfo(++mCurrentStageIndex);

// 初始化已选择框

mBtnSelectWords = initWordSelect();


LayoutParams params = new LayoutParams(80, 80);


for (int i = 0; i < mBtnSelectWords.size(); i++) {

mViewWordsContainer.addView(

mBtnSelectWords.get(i).mViewButton,params);

}


// 获得数据

mAllWords = initAllWord();

// 更新数据- MyGridView

mMyGridView.updateData(mAllWords);

}


public void onWordButtonClick(WordButton wordButton) {

// Toast.makeText(this, wordButton.mIndex+" ", Toast.LENGTH_SHORT).show();

setSelectWord(wordButton);

Toast.makeText(this, wordButton.mIndex+" ", Toast.LENGTH_SHORT).show();

}


public void clearTheAnswer(WordButton wordButton){

wordButton.mViewButton.setText("");

//属性字符串

wordButton.mWordString=" ";

wordButton.mIsVisiable=false;

//设置待选框的

setButtonVisiable(mAllWords.get(wordButton.mIndex), View.VISIBLE);

}

/**

* 设置答案

* wordButton代表当前button点击的对象

* @param wordButton

*/

private void setSelectWord(WordButton wordButton) {

for (int i = 0; i < mBtnSelectWords.size(); i++) {

if (mBtnSelectWords.get(i).mWordString.length()==0) {

//设置答案文字框内容及可见性(为已选文字框设置内容)

mBtnSelectWords.get(i).mViewButton.setText(wordButton.mWordString);

//设置可见性

mBtnSelectWords.get(i).mIsVisiable = true;

//设置按键

mBtnSelectWords.get(i).mWordString = wordButton.mWordString;

// 记录索引

mBtnSelectWords.get(i).mIndex = wordButton.mIndex;

MyLog.d(TAG, mBtnSelectWords.get(i).mIndex+" ");

// MyLog.d(TAG, mBtnSelectWords.get(i).mIndex + "");

// 设置待选框可见性

setButtonVisiable(wordButton, View.INVISIBLE);

//阻止其继续运行

break;

}

}

}


/**

* 设置待选文字框是否可见

* @param button

* @param visibility

*/

private void setButtonVisiable(WordButton button ,int visibility){

button.mViewButton.setVisibility(visibility);

//设置可见性的属性

button.mIsVisiable = (visibility == View.VISIBLE) ? true : false;

// button.mIsVisiable = (visibility == View.VISIBLE) ? false : true;

//Log

MyLog.d(TAG, button.mIsVisiable+" ");

}

/**

* 初始化待选文字框

*/

private ArrayList<WordButton> initAllWord() {

ArrayList<WordButton> data = new ArrayList<WordButton>();


// 获得所有待选文字

String [] words=generateWords();


for (int i = 0; i < MyGridView.COUNTS_WORDS; i++) {

WordButton button = new WordButton();


//对文字逐个赋值

button.mWordString = words[i];


data.add(button);

}


return data;

}


/**

* 初始化已选择文字框

* @return

*/

private ArrayList<WordButton> initWordSelect() {

ArrayList<WordButton> data = new ArrayList<WordButton>();


for (int i = 0; i < mCurrentSong.getNameLength(); i++) {

View view = Util.getView(MainActivity.this, R.layout.self_ui_gridview_item);


final WordButton holder = new WordButton();


holder.mViewButton = (Button)view.findViewById(R.id.item_btn);

holder.mViewButton.setTextColor(Color.WHITE);

holder.mViewButton.setText("");

holder.mIsVisiable = false;


holder.mViewButton.setBackgroundResource(R.drawable.game_wordblank);


//增加点击事件

holder.mViewButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

clearTheAnswer(holder);

}

});

data.add(holder);

}


return data;

}

/**

* 生成所有的待选文字

* @return

*/

private String [] generateWords(){

Random random=new Random();

String [] words=new String[MyGridView.COUNTS_WORDS];

//存入歌名

for(int i=0;i<mCurrentSong.getNameLength();i++){

//歌曲名字转换成相应的字符

words[i]=mCurrentSong.getNameCharacters()[i]+" ";

}

//获取随机文字并存入数组

for(int i=mCurrentSong.getNameLength();

i<MyGridView.COUNTS_WORDS;i++){

words[i]=getRandomChar()+" ";

}

/**

* 打乱文字顺序,首先从所有元素中随机选取一个与第一个元素进行交换

*然后在第二个之后选择一个元素与第二个交换,直到最后一个元素为止

*这样能够确保每个元素在每位置的概率都是1/n

*/

for(int i=MyGridView.COUNTS_WORDS-1;i>=0;i--){

int index=random.nextInt(i+1);

String buf=words[index];

words[index]=words[i];

words[i]=buf;

}

return words;

}

/**

* 生成随机汉字

* @return

*/


private char getRandomChar(){

String str=" ";

int hightPos;

int lowPos;

Random random=new Random();

hightPos=(176+Math.abs(random.nextInt(39)));

lowPos=(161+Math.abs(random.nextInt(93)));

//高位和低位的组合

byte[] b=new byte[2];

b[0]=(Integer.valueOf(hightPos)).byteValue();

b[1]=(Integer.valueOf(lowPos)).byteValue();

try {

str=new String(b,"GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return str.charAt(0);

}

}


0 回复 有任何疑惑可以回复我~
#1

Sawano

请问你找到问题所在了吗 我也遇到了这个问题
2016-03-02 回复 有任何疑惑可以回复我~

public void onWordButtonClick(WordButton wordButton) {

// Toast.makeText(this, wordButton.mIndex+" ", Toast.LENGTH_SHORT).show();

setSelectWord(wordButton);



}

private void setSelectWord(WordButton wordButton) {

for (int i = 0; i < mBtnSelectWords.size(); i++) {

if (mBtnSelectWords.get(i).mWordString.length()==0) {

//设置答案文字框内容及可见性(为已选文字框设置内容)

mBtnSelectWords.get(i).mViewButton.setText(wordButton.mWordString);

//设置可见性

mBtnSelectWords.get(i).mIsVisiable = true;

//设置按键

mBtnSelectWords.get(i).mWordString = wordButton.mWordString;

// 记录索引

mBtnSelectWords.get(i).mIndex = wordButton.mIndex;

MyLog.d(TAG, mBtnSelectWords.get(i).mIndex+" ");

// MyLog.d(TAG, mBtnSelectWords.get(i).mIndex + "");

// 设置待选框可见性

setButtonVisiable(wordButton, View.INVISIBLE);

//阻止其继续运行

break;

}

}

}

/**

* 设置待选文字框是否可见

* @param button

* @param visibility

*/

private void setButtonVisiable(WordButton button ,int visibility){

button.mViewButton.setVisibility(visibility);

//设置可见性的属性

button.mIsVisiable = (visibility == View.VISIBLE) ? true : false;

// button.mIsVisiable = (visibility == View.VISIBLE) ? false : true;

//Log

MyLog.d(TAG, button.mIsVisiable+" ");

}

麻烦老师帮我看看,这块哪里出问题了


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android猜歌游戏是这样炼成的
  • 参与学习       27735    人
  • 解答问题       422    个

手把手教你完成一款猜歌类游戏,向你展示游戏实现的全部细节

进入课程
意见反馈 帮助中心 APP下载
官方微信