老师,我完全按照你的代码写的,为什么点击按钮后,没有出现视频中讲解的效果,待选框文字不能被隐藏,已选框没有文字的显示。。。。。。。。。
4 回答
这是第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);
}
}
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+" ");
}
麻烦老师帮我看看,这块哪里出问题了
举报