package com.ustc.dystu.dandelion;
import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.ustc.dystu.dandelion.bean.NoteInfo;
import com.ustc.dystu.dandelion.constant.Constants;
import com.ustc.dystu.dandelion.net.DandelionAPI;
import com.ustc.dystu.dandelion.utils.Logger;
import com.ustc.dystu.dandelion.utils.blow.Parameter;
import com.ustc.dystu.dandelion.utils.blow.RecordThread;
import com.ustc.dystu.dandelion.utils.image.ImageCache;
import com.ustc.dystu.dandelion.utils.image.ImageFetcher;
import com.ustc.dystu.dandelion.utils.image.Utils;
public class BlowActivity extends Activity implements OnClickListener{
private final String TAG = BlowActivity.class.getSimpleName();
public static final int BLOW_FINISHED = 0;
private static final int REQUEST_RANDOM_NOTE = 1;
private Animation alphaAnimation;
private Animation alphaAnimation2;
private Animation scaleAnimation;;
private Animation scaleAnimation2;;
private Animation singleBlowAnim;;
// 向右动画
private Animation loadAnimation1;
private Animation loadAnimation2;
private Animation loadAnimation3;
private Animation loadAnimation4;
private Animation loadAnimation5;
private Animation loadAnimation6;
private Animation loadAnimation7;
private Animation loadAnimation8;
private Animation loadAnimation9;
private Animation loadAnimation10;
private Animation loadAnimation11;
// 向左动画
private Animation loadAnimation1_1;
private Animation loadAnimation2_1;
private Animation loadAnimation3_1;
private Animation loadAnimation4_1;
private Animation loadAnimation5_1;
private Animation loadAnimation6_1;
private Animation loadAnimation7_1;
private Animation loadAnimation8_1;
private Animation loadAnimation9_1;
private Animation loadAnimation10_1;
// 向前动画
private Animation loadAnimation1_2;
private Animation loadAnimation2_2;
private Animation loadAnimation3_2;
private Animation loadAnimation4_2;
private Animation loadAnimation5_2;
private Animation loadAnimation6_2;
private Animation loadAnimation7_2;
private Animation loadAnimation8_2;
private Animation loadAnimation9_2;
private Animation loadAnimation10_2;
private ImageView ivDandelion;
private ImageView ivDandelionLeft;
private RelativeLayout rlResultControl;
private ImageView ivSingleBlow;
private ImageView iv1;
private ImageView iv2;
private ImageView iv3;
private ImageView iv4;
private ImageView iv5;
private ImageView iv6;
private ImageView iv7;
private ImageView iv8;
private ImageView iv9;
private ImageView iv10;
private ImageView iv11;
private ImageView iv1_1;
private ImageView iv2_1;
private ImageView iv3_1;
private ImageView iv4_1;
private ImageView iv5_1;
private ImageView iv6_1;
private ImageView iv7_1;
private ImageView iv8_1;
private ImageView iv9_1;
private ImageView iv10_1;
private ImageView iv1_2;
private ImageView iv2_2;
private ImageView iv3_2;
private ImageView iv4_2;
private ImageView iv5_2;
private ImageView iv6_2;
private ImageView iv7_2;
private ImageView iv8_2;
private ImageView iv9_2;
private ImageView iv10_2;
RecordThread tt = null;
ImageView ivBack;
RelativeLayout rlSeedResult;
private NoteInfo mNoteInfo;
private MediaPlayer mediaPlayer;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case BLOW_FINISHED:
startAnim();
break;
case REQUEST_RANDOM_NOTE:
if (msg.obj != null) {
mNoteInfo = (NoteInfo) msg.obj;
Logger.d(TAG, "info result-->" + mNoteInfo);
updateSeedResultInfo();
}
break;
default:
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blow);
tvTitle = (TextView) findViewById(R.id.tv_title);
// tvTitle.setOnClickListener(this);
ivBack = (ImageView) findViewById(R.id.iv_back);
ivBack.setOnClickListener(this);
initViews();
initData();
initBeepSound();
}
boolean canRecord = true;
@Override
protected void onResume() {
if (canRecord) {
startRecord();
}
super.onResume();
}
private void initViews() {
initSeedResultInfo();
initAnim();
}
private void initData() {
clearSeedResult();
new Thread() {
public void run() {
NoteInfo info = DandelionAPI.getInstance(BlowActivity.this)
.getRandomTravelNote();
Message msg = Message.obtain();
msg.what = REQUEST_RANDOM_NOTE;
msg.obj = info;
mHandler.sendMessage(msg);
};
}.start();
}
private TextView tvResultLocation;
private TextView tvResultTitle;
private ImageView ivResultPortrait;
private ImageView ivResultFolder;
private TextView tvResultTime;
private Button btnLetFlow;
private Button btnEnter;
private ImageFetcher mImageWorker;
private ImageFetcher mPortraitWorker;
private TextView tvTitle;
private void initSeedResultInfo() {
rlResultControl = (RelativeLayout) findViewById(R.id.rl_result_control);
tvResultLocation = (TextView) findViewById(R.id.tv_result_location);
tvResultTitle = (TextView) findViewById(R.id.tv_result_title);
ivResultPortrait = (ImageView) findViewById(R.id.iv_result_portrait);
ivResultFolder = (ImageView) findViewById(R.id.iv_result_folder);
tvResultTime = (TextView) findViewById(R.id.tv_result_time);
btnLetFlow = (Button) findViewById(R.id.btn_let_blow);
btnLetFlow.setOnClickListener(this);
btnEnter = (Button) findViewById(R.id.btn_enter_note);
btnEnter.setOnClickListener(this);
int[] wh = Utils.getMidPicWidthAndHeight(BlowActivity.this);
mImageWorker = new ImageFetcher(this, wh[0], wh[1]);
mImageWorker.setImageCache(new ImageCache(this,
Constants.THUMNAIL_CACHE_PATH));
mImageWorker.setLoadingImage(R.drawable.share_public_headview_bg);
mImageWorker.setImageFadeIn(false);
mPortraitWorker = new ImageFetcher(this, 80);
mPortraitWorker.setImageCache(new ImageCache(this,
Constants.THUMNAIL_CACHE_PROFILE_PATH));
mPortraitWorker.setLoadingImage(R.drawable.icon_vdisk);
mPortraitWorker.setImageFadeIn(false);
}
private void updateSeedResultInfo() {
if (mNoteInfo != null) {
tvResultLocation.setText(mNoteInfo.getFirstLocation());
tvResultTitle.setText(mNoteInfo.note_title);
tvResultTime.setText(mNoteInfo.getFormatNoteFromTime() + " "
+ mNoteInfo.getTotalDays());
if (!TextUtils.isEmpty(mNoteInfo.note_folder_url)) {
mImageWorker.loadImage(mNoteInfo.note_folder_url,
ivResultFolder, true);
} else {
ivResultFolder
.setImageResource(R.drawable.share_public_headview_bg);
}
if (mNoteInfo.userIno != null) {
if (!TextUtils.isEmpty(mNoteInfo.userIno.profile_image_url)) {
mPortraitWorker.loadImage(
mNoteInfo.userIno.profile_image_url,
ivResultPortrait, true);
} else {
ivResultPortrait.setImageResource(R.drawable.icon_vdisk);
}
}
}
}
private void clearSeedResult() {
tvResultLocation.setText("...");
tvResultTitle.setText("...");
tvResultTime.setText("...");
ivResultFolder.setImageResource(R.drawable.share_public_headview_bg);
ivResultPortrait.setImageResource(R.drawable.icon_vdisk);
}
private static final float BEEP_VOLUME = 0.80f;
private void initBeepSound() {
if (mediaPlayer == null) {
// The volume on STREAM_SYSTEM is not adjustable, and users found it
// too loud,
// so we now play on the music stream.
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnCompletionListener(beepListener);
AssetFileDescriptor file = getResources().openRawResourceFd(
R.raw.blow1);
try {
mediaPlayer.setDataSource(file.getFileDescriptor(),
file.getStartOffset(), file.getLength());
file.close();
mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
mediaPlayer.prepare();
} catch (IOException e) {
mediaPlayer = null;
}
}
}
/**
* When the beep has finished playing, rewind to queue up another one.
*/
private final OnCompletionListener beepListener = new OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.seekTo(0);
}
};
private void initAnim() {
alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.anim_alpha);
alphaAnimation2 = AnimationUtils
.loadAnimation(this, R.anim.anim_alpha2);
scaleAnimation = AnimationUtils.loadAnimation(this,
R.anim.anim_seed_result);
scaleAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
rlResultControl.setVisibility(View.VISIBLE);
rlResultControl.startAnimation(alphaAnimation2);
}
});
scaleAnimation2 = AnimationUtils.loadAnimation(this,
R.anim.anim_seed_result_dispear);
scaleAnimation2.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Logger.d(TAG, "satrt single blow anim...");
startSingleBlowAnim();
initData();
}
});
singleBlowAnim = AnimationUtils.loadAnimation(this,
R.anim.anim_single_blow);
singleBlowAnim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
ivSingleBlow.setVisibility(View.GONE);
tvTitle.setEnabled(true);
ivDandelion.setVisibility(View.VISIBLE);
ivDandelion.setEnabled(true);
ivDandelionLeft.setVisibility(View.INVISIBLE);
canRecord = true;
startRecord();
}
});
loadAnimation1 = AnimationUtils.loadAnimation(this, R.anim.anim_1);
loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.anim_2);
loadAnimation3 = AnimationUtils.loadAnimation(this, R.anim.anim_3);
loadAnimation4 = AnimationUtils.loadAnimation(this, R.anim.anim_4);
loadAnimation5 = AnimationUtils.loadAnimation(this, R.anim.anim_5);
loadAnimation6 = AnimationUtils.loadAnimation(this, R.anim.anim_6);
loadAnimation7 = AnimationUtils.loadAnimation(this, R.anim.anim_7);
loadAnimation8 = AnimationUtils.loadAnimation(this, R.anim.anim_8);
loadAnimation9 = AnimationUtils.loadAnimation(this, R.anim.anim_9);
loadAnimation10 = AnimationUtils.loadAnimation(this, R.anim.anim_10);
loadAnimation11 = AnimationUtils.loadAnimation(this, R.anim.anim_11);
loadAnimation1_1 = AnimationUtils.loadAnimation(this, R.anim.anim_1_1);
loadAnimation2_1 = AnimationUtils.loadAnimation(this, R.anim.anim_2_1);
loadAnimation3_1 = AnimationUtils.loadAnimation(this, R.anim.anim_3_1);
loadAnimation4_1 = AnimationUtils.loadAnimation(this, R.anim.anim_4_1);
loadAnimation5_1 = AnimationUtils.loadAnimation(this, R.anim.anim_5_1);
loadAnimation6_1 = AnimationUtils.loadAnimation(this, R.anim.anim_6_1);
loadAnimation7_1 = AnimationUtils.loadAnimation(this, R.anim.anim_7_1);
loadAnimation8_1 = AnimationUtils.loadAnimation(this, R.anim.anim_8_1);
loadAnimation9_1 = AnimationUtils.loadAnimation(this, R.anim.anim_9_1);
loadAnimation10_1 = AnimationUtils
.loadAnimation(this, R.anim.anim_10_1);
loadAnimation1_2 = AnimationUtils.loadAnimation(this, R.anim.anim_2_2);
loadAnimation2_2 = AnimationUtils.loadAnimation(this, R.anim.anim_2_2);
loadAnimation3_2 = AnimationUtils.loadAnimation(this, R.anim.anim_3_2);
loadAnimation4_2 = AnimationUtils.loadAnimation(this, R.anim.anim_4_2);
loadAnimation5_2 = AnimationUtils.loadAnimation(this, R.anim.anim_5_2);
loadAnimation6_2 = AnimationUtils.loadAnimation(this, R.anim.anim_6_2);
loadAnimation7_2 = AnimationUtils.loadAnimation(this, R.anim.anim_7_2);
loadAnimation8_2 = AnimationUtils.loadAnimation(this, R.anim.anim_8_2);
loadAnimation9_2 = AnimationUtils.loadAnimation(this, R.anim.anim_9_2);
loadAnimation10_2 = AnimationUtils
.loadAnimation(this, R.anim.anim_10_2);
loadAnimation11.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
startSeedResultAnim();
}
});
iv1 = (ImageView) findViewById(R.id.iv_1);
iv2 = (ImageView) findViewById(R.id.iv_2);
iv3 = (ImageView) findViewById(R.id.iv_3);
iv4 = (ImageView) findViewById(R.id.iv_4);
iv5 = (ImageView) findViewById(R.id.iv_5);
iv6 = (ImageView) findViewById(R.id.iv_6);
iv7 = (ImageView) findViewById(R.id.iv_7);
iv8 = (ImageView) findViewById(R.id.iv_8);
iv9 = (ImageView) findViewById(R.id.iv_9);
iv10 = (ImageView) findViewById(R.id.iv_10);
iv11 = (ImageView) findViewById(R.id.iv_11);
iv1_1 = (ImageView) findViewById(R.id.iv_1_1);
iv2_1 = (ImageView) findViewById(R.id.iv_2_1);
iv3_1 = (ImageView) findViewById(R.id.iv_3_1);
iv4_1 = (ImageView) findViewById(R.id.iv_4_1);
iv5_1 = (ImageView) findViewById(R.id.iv_5_1);
iv6_1 = (ImageView) findViewById(R.id.iv_6_1);
iv7_1 = (ImageView) findViewById(R.id.iv_7_1);
iv8_1 = (ImageView) findViewById(R.id.iv_8_1);
iv9_1 = (ImageView) findViewById(R.id.iv_9_1);
iv10_1 = (ImageView) findViewById(R.id.iv_10_1);
iv1_2 = (ImageView) findViewById(R.id.iv_1_2);
iv2_2 = (ImageView) findViewById(R.id.iv_2_2);
iv3_2 = (ImageView) findViewById(R.id.iv_3_2);
iv4_2 = (ImageView) findViewById(R.id.iv_4_2);
iv5_2 = (ImageView) findViewById(R.id.iv_5_2);
iv6_2 = (ImageView) findViewById(R.id.iv_6_2);
iv7_2 = (ImageView) findViewById(R.id.iv_7_2);
iv8_2 = (ImageView) findViewById(R.id.iv_8_2);
iv9_2 = (ImageView) findViewById(R.id.iv_9_2);
iv10_2 = (ImageView) findViewById(R.id.iv_10_2);
setSeedsInvisible();
ivDandelion = (ImageView) findViewById(R.id.iv_dandelion);
ivDandelion.setOnClickListener(this);
ivDandelionLeft = (ImageView) findViewById(R.id.iv_dandelion_left);
rlSeedResult = (RelativeLayout) findViewById(R.id.rl_seed_result);
ivSingleBlow = (ImageView) findViewById(R.id.iv_single_blow);
}
private void setSeedsVisible() {
iv1.setVisibility(View.VISIBLE);
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
iv4.setVisibility(View.VISIBLE);
iv5.setVisibility(View.VISIBLE);
iv6.setVisibility(View.VISIBLE);
iv7.setVisibility(View.VISIBLE);
iv8.setVisibility(View.VISIBLE);
iv9.setVisibility(View.VISIBLE);
iv10.setVisibility(View.VISIBLE);
iv11.setVisibility(View.VISIBLE);
iv1_1.setVisibility(View.VISIBLE);
iv2_1.setVisibility(View.VISIBLE);
iv3_1.setVisibility(View.VISIBLE);
iv4_1.setVisibility(View.VISIBLE);
iv5_1.setVisibility(View.VISIBLE);
iv6_1.setVisibility(View.VISIBLE);
iv7_1.setVisibility(View.VISIBLE);
iv8_1.setVisibility(View.VISIBLE);
iv9_1.setVisibility(View.VISIBLE);
iv10_1.setVisibility(View.VISIBLE);
iv1_2.setVisibility(View.VISIBLE);
iv2_2.setVisibility(View.VISIBLE);
iv3_2.setVisibility(View.VISIBLE);
iv4_2.setVisibility(View.VISIBLE);
iv5_2.setVisibility(View.VISIBLE);
iv6_2.setVisibility(View.VISIBLE);
iv7_2.setVisibility(View.VISIBLE);
iv8_2.setVisibility(View.VISIBLE);
iv9_2.setVisibility(View.VISIBLE);
iv10_2.setVisibility(View.VISIBLE);
}
private void setSeedsInvisible() {
iv1.setVisibility(View.INVISIBLE);
iv2.setVisibility(View.INVISIBLE);
iv3.setVisibility(View.INVISIBLE);
iv4.setVisibility(View.INVISIBLE);
iv5.setVisibility(View.INVISIBLE);
iv6.setVisibility(View.INVISIBLE);
iv7.setVisibility(View.INVISIBLE);
iv8.setVisibility(View.INVISIBLE);
iv9.setVisibility(View.INVISIBLE);
iv10.setVisibility(View.INVISIBLE);
iv11.setVisibility(View.INVISIBLE);
iv1_1.setVisibility(View.INVISIBLE);
iv2_1.setVisibility(View.INVISIBLE);
iv3_1.setVisibility(View.INVISIBLE);
iv4_1.setVisibility(View.INVISIBLE);
iv5_1.setVisibility(View.INVISIBLE);
iv6_1.setVisibility(View.INVISIBLE);
iv7_1.setVisibility(View.INVISIBLE);
iv8_1.setVisibility(View.INVISIBLE);
iv9_1.setVisibility(View.INVISIBLE);
iv10_1.setVisibility(View.INVISIBLE);
iv1_2.setVisibility(View.INVISIBLE);
iv2_2.setVisibility(View.INVISIBLE);
iv3_2.setVisibility(View.INVISIBLE);
iv4_2.setVisibility(View.INVISIBLE);
iv5_2.setVisibility(View.INVISIBLE);
iv6_2.setVisibility(View.INVISIBLE);
iv7_2.setVisibility(View.INVISIBLE);
iv8_2.setVisibility(View.INVISIBLE);
iv9_2.setVisibility(View.INVISIBLE);
iv10_2.setVisibility(View.INVISIBLE);
}
private void startAnim() {
Parameter.isblow = false;
if (mediaPlayer != null) {
mediaPlayer.start();
}
ivDandelion.startAnimation(alphaAnimation);
ivDandelion.setVisibility(View.INVISIBLE);
ivDandelionLeft.setVisibility(View.VISIBLE);
ivDandelionLeft.startAnimation(alphaAnimation2);
canRecord = false;
setSeedsVisible();
iv1.startAnimation(loadAnimation1);
iv2.startAnimation(loadAnimation2);
iv3.startAnimation(loadAnimation3);
iv4.startAnimation(loadAnimation4);
iv5.startAnimation(loadAnimation5);
iv6.startAnimation(loadAnimation6);
iv7.startAnimation(loadAnimation7);
iv8.startAnimation(loadAnimation8);
iv9.startAnimation(loadAnimation9);
iv10.startAnimation(loadAnimation10);
iv11.startAnimation(loadAnimation11);
iv1_1.startAnimation(loadAnimation1_1);
iv2_1.startAnimation(loadAnimation2_1);
iv3_1.startAnimation(loadAnimation3_1);
iv4_1.startAnimation(loadAnimation4_1);
iv5_1.startAnimation(loadAnimation5_1);
iv6_1.startAnimation(loadAnimation6_1);
iv7_1.startAnimation(loadAnimation7_1);
iv8_1.startAnimation(loadAnimation8_1);
iv9_1.startAnimation(loadAnimation9_1);
iv10_1.startAnimation(loadAnimation10_1);
iv1_2.startAnimation(loadAnimation1_2);
iv2_2.startAnimation(loadAnimation2_2);
iv3_2.startAnimation(loadAnimation3_2);
iv4_2.startAnimation(loadAnimation4_2);
iv5_2.startAnimation(loadAnimation5_2);
iv6_2.startAnimation(loadAnimation6_2);
iv7_2.startAnimation(loadAnimation7_2);
iv8_2.startAnimation(loadAnimation8_2);
iv9_2.startAnimation(loadAnimation9_2);
iv10_2.startAnimation(loadAnimation10_2);
setSeedsInvisible();
}
private void startSeedResultAnim() {
rlSeedResult.setVisibility(View.VISIBLE);
rlSeedResult.startAnimation(scaleAnimation);
}
private void disappearSeedResultAnim() {
rlSeedResult.startAnimation(scaleAnimation2);
rlSeedResult.setVisibility(View.INVISIBLE);
}
private void startSingleBlowAnim() {
ivSingleBlow.setVisibility(View.VISIBLE);
ivSingleBlow.startAnimation(singleBlowAnim);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_title:
// tt = new RecordThread(r); // 点击按钮,启动线程
// tt.start();
tvTitle.setEnabled(false);
startAnim();
// startSeedResultAnim();
// disappearSeedResultAnim();
break;
case R.id.iv_back:
finish();
break;
case R.id.btn_let_blow:
rlResultControl.startAnimation(alphaAnimation);
rlResultControl.setVisibility(View.GONE);
disappearSeedResultAnim();
break;
case R.id.btn_enter_note:
Intent intent = new Intent();
intent.putExtra("note_info", mNoteInfo);// 没有微博uids
intent.setClass(this, NoteInfoActivity.class);
startActivity(intent);
reset();
break;
case R.id.iv_dandelion:
ivDandelion.setEnabled(false);
startAnim();
break;
default:
break;
}
}
private void reset() {
rlResultControl.setVisibility(View.GONE);
rlSeedResult.setVisibility(View.INVISIBLE);
ivDandelion.setVisibility(View.VISIBLE);
ivDandelion.setEnabled(true);
ivDandelionLeft.setVisibility(View.INVISIBLE);
tvTitle.setEnabled(true);
canRecord = true;
}
private void startRecord() {
Logger.d(TAG, "start record...");
tt = new RecordThread(mHandler); // 点击按钮,启动线程
tt.start();
}
private void stopRecord() {
Parameter.isblow = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
stopRecord();
if (mediaPlayer != null) {
mediaPlayer.stop();
}
}
}