package com.bill.mygitosc.fragment; import android.content.Intent; import android.graphics.Bitmap; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.os.Vibrator; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; import com.bill.mygitosc.R; import com.bill.mygitosc.bean.Project; import com.bill.mygitosc.common.BitmapCache; import com.bill.mygitosc.ui.ViewProjectInfoActivity; import com.bill.mygitosc.utils.OscApiUtils; import com.bill.mygitosc.common.ShakeListener; import com.bill.mygitosc.common.TypefaceUtils; import com.bill.mygitosc.utils.Utils; import com.bill.mygitosc.gson.GsonRequest; import java.io.IOException; import java.util.HashMap; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; public class ShakeFragment extends Fragment { @InjectView(R.id.shakeImgUp) RelativeLayout mImgUp; @InjectView(R.id.shakeImgDown) RelativeLayout mImgDn; @InjectView(R.id.shake_loading) LinearLayout mLoaging; @InjectView(R.id.shakeres_paroject) RelativeLayout mShakeResProject;// ҡ����Ŀ @InjectView(R.id.iv_portrait) ImageView mProjectFace; @InjectView(R.id.tv_title) TextView mProjectTitle; @InjectView(R.id.tv_description) TextView mProjectDescription; @InjectView(R.id.tv_watch) TextView mProjectLanguage; @InjectView(R.id.tv_star) TextView mProjectWatchNums; @InjectView(R.id.tv_fork) TextView mProjectStarNums; @InjectView(R.id.tv_language) TextView mProjectForkNums; private final int DURATION_TIME = 600; private ShakeListener mShakeListener = null; private Vibrator mVibrator; private Project mProject; private SoundPool sndPool; private HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>(); private Bitmap mBitmap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); mVibrator = (Vibrator) getActivity().getApplication().getSystemService( getActivity().VIBRATOR_SERVICE); loadSound(); mShakeListener = new ShakeListener(getActivity()); // �������ֻ�ҡ�� mShakeListener.setOnShakeListener(new ShakeListener.OnShakeListener() { public void onShake() { startAnim(); } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_shake, container, false); ButterKnife.inject(this, view); return view; } private void loadSound() { sndPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 5); new Thread() { public void run() { try { soundPoolMap.put( 0, sndPool.load( getActivity().getAssets().openFd( "sound/shake_sound_male.mp3"), 1)); soundPoolMap.put(1, sndPool.load( getActivity().getAssets().openFd("sound/shake_match.mp3"), 1)); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void startAnim() { AnimationSet animup = new AnimationSet(true); TranslateAnimation mytranslateanimup0 = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, -0.5f); mytranslateanimup0.setDuration(DURATION_TIME); TranslateAnimation mytranslateanimup1 = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, +0.5f); mytranslateanimup1.setDuration(DURATION_TIME); mytranslateanimup1.setStartOffset(DURATION_TIME); animup.addAnimation(mytranslateanimup0); animup.addAnimation(mytranslateanimup1); mImgUp.startAnimation(animup); AnimationSet animdn = new AnimationSet(true); TranslateAnimation mytranslateanimdn0 = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, +0.5f); mytranslateanimdn0.setDuration(DURATION_TIME); TranslateAnimation mytranslateanimdn1 = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, -0.5f); mytranslateanimdn1.setDuration(DURATION_TIME); mytranslateanimdn1.setStartOffset(DURATION_TIME); animdn.addAnimation(mytranslateanimdn0); animdn.addAnimation(mytranslateanimdn1); mImgDn.startAnimation(animdn); // ������������ʼʱ��ʾ����״̬�� mytranslateanimdn0.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { mShakeResProject.setVisibility(View.GONE); mShakeListener.stop(); sndPool.play(soundPoolMap.get(0), (float) 0.2, (float) 0.2, 0, 0, (float) 0.6); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { loadProject(); } }); } private void loadProject() { beforeLoading(); final RequestQueue mQueue = Volley.newRequestQueue(getActivity()); GsonRequest<Project> gsonRequest = new GsonRequest<Project>(OscApiUtils.getRomProjectURL(), Project.class, new Response.Listener<Project>() { @Override public void onResponse(Project response) { mProject = response; if (mProject != null) { mShakeResProject.setVisibility(View.VISIBLE); mProjectTitle.setText(mProject.getOwner().getName() + " / " + mProject.getName()); String description = mProject.getDescription(); if (TextUtils.isEmpty(description)) { description = getString(R.string.no_description_hint); } mProjectDescription.setText(description); TypefaceUtils.setIconText(mProjectStarNums, getString(R.string.sem_watch) + " " + mProject.getWatches_count()); TypefaceUtils.setIconText(mProjectForkNums, getString(R.string.sem_star) + " " + mProject.getStars_count()); TypefaceUtils.setIconText(mProjectWatchNums, getString(R.string.sem_fork) + " " + mProject.getForks_count()); String language = mProject.getLanguage(); if (TextUtils.isEmpty(language)) { mProjectLanguage.setVisibility(View.GONE); } else { TypefaceUtils.setIconText(mProjectLanguage, getString(R.string.sem_tag) + " " + mProject.getLanguage()); } if (!Utils.checkNoPicMode(getActivity())) { ImageLoader.ImageListener listener = ImageLoader.getImageListener(mProjectFace, R.drawable.mini_avatar, R.drawable.mini_avatar); ImageLoader mImageLoader = new ImageLoader(mQueue, new BitmapCache()); mImageLoader.get(mProject.getOwner().getNew_portrait(), listener); } } afterLoading(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getActivity(), getString(R.string.no_random_project_find), Toast.LENGTH_SHORT).show(); afterLoading(); } }); mQueue.add(gsonRequest); } private void beforeLoading() { mLoaging.setVisibility(View.VISIBLE); mShakeResProject.setVisibility(View.GONE); } private void afterLoading() { mLoaging.setVisibility(View.GONE); sndPool.play(soundPoolMap.get(1), (float) 0.2, (float) 0.2, 0, 0, (float) 0.6); mVibrator.cancel(); mShakeListener.start(); } @OnClick(R.id.shakeres_paroject) public void showProjectInfo() { if (mProject != null) { Intent intent = new Intent(getActivity(), ViewProjectInfoActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable(ViewProjectInfoActivity.VIEW_PROJECT_INFO, mProject); intent.putExtras(bundle); getActivity().startActivity(intent); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_shake_fragment, menu); menu.findItem(R.id.action_share).setVisible(true); menu.findItem(R.id.action_search).setVisible(false); menu.findItem(R.id.action_remind).setVisible(false); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_share) { return true; } return super.onOptionsItemSelected(item); } /*public void startVibrato() { mVibrator.vibrate(new long[]{500, 200, 500, 200}, -1); }*/ @Override public void onDestroy() { super.onDestroy(); if (mShakeListener != null) { mShakeListener.stop(); } } }