package com.kaixin.android; import java.io.File; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView.LayoutParams; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.PopupWindow; import com.kaixin.android.common.KaiXinAddress; import com.kaixin.android.service.MessagePushService; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.utils.StorageUtils; /** * 主Activity,用于初始化一些界面和Dialog * * @author gyz * */ public class KXActivity extends Activity { protected KXApplication mKXApplication; /** * 屏幕的宽度和高度 */ protected int mScreenWidth; protected int mScreenHeight; /** * 表情控件 */ private PopupWindow mFacePop; private View mFaceView; protected ImageView mFaceClose; protected GridView mFaceGridView; protected ImageLoader imageLoader; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mKXApplication = (KXApplication) getApplication(); /** * 获取屏幕宽度和高度 */ DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); mScreenWidth = metric.widthPixels; mScreenHeight = metric.heightPixels; initFace(); } @Override protected void onResume() { super.onResume(); //优化OOM配置 File cacheDir = StorageUtils.getOwnCacheDirectory( this.getApplicationContext(), KaiXinAddress.SDCARED_CACHE); DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Config.RGB_565).build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this.getApplicationContext()).threadPoolSize(2).threadPriority(Thread.NORM_PRIORITY - 2) .diskCache(new UnlimitedDiscCache(cacheDir)).memoryCache(new WeakMemoryCache()) .defaultDisplayImageOptions(defaultOptions).build(); imageLoader = ImageLoader.getInstance(); imageLoader.init(config); } /** * 初始化表情控件 */ private void initFace() { mFaceView = LayoutInflater.from(this).inflate(R.layout.face, null); mFaceClose = (ImageView) mFaceView.findViewById(R.id.face_close); mFaceGridView = (GridView) mFaceView.findViewById(R.id.face_gridview); FaceAdapter mAdapter = new FaceAdapter(this); mFaceGridView.setAdapter(mAdapter); mFacePop = new PopupWindow(mFaceView, mScreenWidth - 60, mScreenWidth, true); mFacePop.setBackgroundDrawable(new BitmapDrawable()); } /** * 显示表情控件 * * @param parent * 显示位置的根布局 */ protected void showFace(View parent) { if (!mFacePop.isShowing()) { ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(KXActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); mFacePop.showAtLocation(parent, Gravity.CENTER, 0, 0); } } /** * 隐藏表情控件 */ protected void dismissFace() { if (mFacePop != null && mFacePop.isShowing()) { mFacePop.dismiss(); } } /** * 表情适配器 * * @author gyz * */ private class FaceAdapter extends BaseAdapter { private Context mContext; public FaceAdapter(Context context) { mContext = context; } public int getCount() { return mKXApplication.mFaces.length; } public Object getItem(int position) { return mKXApplication.getFaceBitmap(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView face = null; if (convertView == null) { face = new ImageView(mContext); LayoutParams params = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int widthAndHeight = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 30, mContext .getResources().getDisplayMetrics()); params.width = widthAndHeight; params.height = widthAndHeight; face.setLayoutParams(params); face.setScaleType(ImageView.ScaleType.CENTER_INSIDE); } else { face = (ImageView) convertView; } face.setImageBitmap(mKXApplication.getFaceBitmap(position)); return face; } } }