/* * Copyright (C) 2012 yueyueniao * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.suan.weclient.fragment; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; import com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator; import com.slidingmenu.lib.app.SlidingFragmentActivity; import com.suan.weclient.R; import com.suan.weclient.activity.MainActivity; import com.suan.weclient.util.GlobalContext; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.bean.UserBean; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.WechatManager.OnActionFinishListener; import com.suan.weclient.util.net.images.ImageCacheManager; public class LeftFragment extends BaseFragment { private FragmentManager mFragmentManager; private ProfileFragment profileFragment; private UserListFragment userListFragment; private View view; private RelativeLayout headLayout; private ImageView headImageView; private TextView headTextView; private LinearLayout userListLayout, profileLayout; private ImageView showListView; private DataManager mDataManager; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { /* init the data */ MainActivity mainActivity = (MainActivity)getActivity(); mDataManager = ((GlobalContext)mainActivity.getApplicationContext()).getDataManager(); mFragmentManager = mainActivity.getSupportFragmentManager(); view = inflater.inflate(R.layout.left_layout, null); initFragments(); initWidgets(); initListener(); return view; } private void initFragments() { profileFragment = new ProfileFragment(); userListFragment = new UserListFragment(); FragmentTransaction t = getActivity().getSupportFragmentManager() .beginTransaction(); t.replace(R.id.left_layout_profile, profileFragment); t.replace(R.id.left_layout_user_list, userListFragment); t.commit(); } private void initListener() { mDataManager.setUserListControlListener(new ProfileFragment.UserListControlListener() { @Override public void onUserListShow() { ValueHolder yValueHolder = new ValueHolder(); ObjectAnimator yObjectAnimator = ObjectAnimator.ofFloat(yValueHolder, "y", -userListLayout.getHeight(), 0).setDuration(600); yObjectAnimator.addUpdateListener(new YUpdateListener()); yObjectAnimator.start(); ValueHolder degreeValueHolder = new ValueHolder(); ObjectAnimator degreeObjectAnimator = ObjectAnimator.ofFloat(degreeValueHolder, "degree", 0, 180).setDuration(600); degreeObjectAnimator.addUpdateListener(new DegreeUpdateListener()); degreeObjectAnimator.start(); } @Override public void onUserListDismiss() { ValueHolder yValueHolder = new ValueHolder(); ObjectAnimator yObjectAnimation = ObjectAnimator.ofFloat(yValueHolder, "y", 0, -userListLayout.getHeight()).setDuration(600); yObjectAnimation.addUpdateListener(new YUpdateListener()); yObjectAnimation.start(); ValueHolder degreeValueHolder = new ValueHolder(); ObjectAnimator degreeObjectAnimator = ObjectAnimator.ofFloat(degreeValueHolder, "degree", 180, 0).setDuration(600); degreeObjectAnimator.addUpdateListener(new DegreeUpdateListener()); degreeObjectAnimator.start(); } }); mDataManager.addProfileGetListener(new DataManager.ProfileGetListener() { @Override public void onGet(UserBean userBean) { String nickName = Util.getShortString(userBean.getNickname(), 9, 3); headTextView.setText(nickName); Bitmap imgBitmap = mDataManager.getCacheManager().getBitmap( ImageCacheManager.CACHE_USER_PROFILE + mDataManager.getUserGroup().get(mDataManager.getCurrentPosition()) .getUserName()); if (imgBitmap != null) { headImageView.setImageBitmap(imgBitmap); } else { mDataManager.getWechatManager().getUserImgDirectly(WechatManager.DIALOG_POP_NO, mDataManager.getCurrentPosition(), headImageView, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap nowUserBitmap = (Bitmap) object; mDataManager.getCacheManager().putBitmap( ImageCacheManager.CACHE_USER_PROFILE + mDataManager.getUserGroup() .get(mDataManager.getCurrentPosition()) .getUserName(), nowUserBitmap, true); } } } }); } } }); } private void initWidgets() { headLayout = (RelativeLayout) view.findViewById(R.id.left_layout_head); headLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int userListTop = userListLayout.getTop(); if (userListTop != 0) { showUserList(); } else { dismissUserlist(); } } }); headImageView = (ImageView) view.findViewById(R.id.left_img_profile); headTextView = (TextView) view.findViewById(R.id.left_text_profile); userListLayout = (LinearLayout) view.findViewById(R.id.left_layout_user_list); profileLayout = (LinearLayout) view.findViewById(R.id.left_layout_profile); showListView = (ImageView) view.findViewById(R.id.left_button_show_list); } public class ValueHolder { private float x = 0; private float y = 0; private float degree = 0; public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public void setDegree(float degree) { this.degree = degree; } public float getDegree() { return this.degree; } } public class DegreeUpdateListener implements ValueAnimator.AnimatorUpdateListener { @Override public void onAnimationUpdate(ValueAnimator animation) { Float value = (Float) animation.getAnimatedValue(); float degree = (float) value; int toDegree = (int) degree; try { /* error: Caused by: java.lang.IllegalStateException: Fragment LeftFragment{411e67e8} not attached to Activity at android.support.v4.app.Fragment.getResources(Fragment.java:571) at com.suan.weclient.fragment.LeftFragment$DegreeUpdateListener.onAnimationUpdate(LeftFragment.java:232) at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.animateValue(ValueAnimator.java:1179) at com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.animateValue(ObjectAnimator.java:468) at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.animationFrame(ValueAnimator.java:1140) at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:546) at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:929) at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:952) at com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.start(ObjectAnimator.java:365) at com.suan.weclient.fragment.LeftFragment$1.onUserListDismiss(LeftFragment.java:119) at com.suan.weclient.activity.MainActivity$13.onGroupChangeEnd(MainActivity.java:491) at com.suan.weclient.util.data.DataManager.doGroupChangeEnd(DataManager.java:395) at com.suan.weclient.util.data.DataManager.updateUserGroup(DataManager.java:163) at com.suan.weclient.activity.MainActivity.initDataChangeListener(MainActivity.java:471) at com.suan.weclient.activity.MainActivity.onCreate(MainActivity.java:88) at android.app.Activity.performCreate(Activity.java:5104) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)             at android.app.ActivityThread.access$600(ActivityThread.java:153)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)             at android.os.Handler.dispatchMessage(Handler.java:99)             at android.os.Looper.loop(Looper.java:137)             at android.app.ActivityThread.main(ActivityThread.java:5227)             at java.lang.reflect.Method.invokeNative(Native Method)             at java.lang.reflect.Method.invoke(Method.java:511)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)             at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:126)             at dalvik.system.NativeStart.main(Native Method) */ showListView.setRotationX(showListView.getWidth() / 2 - Util.dipToPx(15, getResources())); showListView.setRotationY(showListView.getHeight() / 2); showListView.setRotation(toDegree); } catch (Exception e) { } } } public class YUpdateListener implements ValueAnimator.AnimatorUpdateListener { @Override public void onAnimationUpdate(ValueAnimator animation) { Float value = (Float) animation.getAnimatedValue(); float top = (float) value; int toTop = (int) top; userListLayout.setTop(toTop); } } private void showUserList() { mDataManager.getUserListControlListener().onUserListShow(); } private void dismissUserlist() { mDataManager.getUserListControlListener().onUserListDismiss(); } }