package com.hyrt.cei.dzb.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup.LayoutParams; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.hyrt.cei.R; import com.hyrt.cei.application.CeiApplication; import com.hyrt.cei.dzb.ui.vo.LRBitmap; import com.hyrt.cei.ui.personcenter.PersonCenter; import com.hyrt.cei.ui.common.LoginActivity; import com.hyrt.cei.ui.common.WebViewUtil; import com.hyrt.cei.ui.ebook.ReadReportActivity; import com.hyrt.cei.ui.econdata.EconDataMain; import com.hyrt.cei.ui.information.InformationMainActivity; import com.hyrt.cei.ui.main.Announcement; import com.hyrt.cei.ui.main.Disclaimer; import com.hyrt.cei.ui.phonestudy.HomePageActivity; import com.hyrt.cei.ui.phonestudy.PreloadActivity; import com.hyrt.cei.ui.witsea.WitSeaActivity; import com.hyrt.cei.update.UpdateManager; import com.hyrt.cei.util.AsyncImageLoader; import com.hyrt.cei.util.XmlUtil; import com.hyrt.cei.vo.AnnouncementNews; import com.hyrt.cei.vo.ColumnEntry; import com.hyrt.cei.vo.ImageResourse; import com.hyrt.cei.vo.Preload; import com.hyrt.cei.webservice.service.Service; public class HomePageDZB extends Activity implements OnClickListener, OnTouchListener { private ExecutorService executorService = Executors.newFixedThreadPool(1); private List<AnnouncementNews> announcementNews; private TextView textNum; private List<ColumnEntry> columnEnties; private ImageView botton1, botton2, botton3, botton4, botton5; private ImageView[] leftImageView = new ImageView[3]; private ImageView[] rightImageView = new ImageView[3]; private AsyncImageLoader asyncImageLoader; private int index; private GestureDetector gestureDetector; private int announcementCount; // 通用页面管理集合 public static List<Activity> commonActivities = new ArrayList<Activity>(); // 用户名 private String loginName; // 左右元素的父级元素 private RelativeLayout leftre; private RelativeLayout righttre; // 全局的菜单集合 private ColumnEntry columnEntry; // 4大业务模块 public static final String[] MODELS = { "移动学习", "政经资讯", "经济数据", "研究报告" }; // 首页背景 public RelativeLayout home_page_re; //一级业务 private List<ColumnEntry> firstColumnEntries; @Override protected void onDestroy() { HomePageDZB.commonActivities.remove(this); super.onDestroy(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home_page_dzb); /*new Handler().postDelayed(new Runnable() { @Override public void run() { boolean isDowning = false; List<Preload> preloads = ((CeiApplication) getApplication()).dataHelper .getPreloadList(); for (int i = 0; i < preloads.size(); i++) if (preloads.get(i).getLoadFinish() != 1) isDowning = true; if (isDowning) alertIsSurePop(new OnClickListener() { @Override public void onClick(View arg0) { popWin.dismiss(); Intent intent = new Intent(HomePageDZB.this, PreloadActivity.class); startActivity(intent); } }); } }, 200);*/ UpdateManager manager = new UpdateManager(HomePageDZB.this); // 检查软件更新 manager.isUpdate(); for (int i = 0; i < HomePageDZB.commonActivities.size(); i++) { try { HomePageDZB isHomePageDZB = (HomePageDZB) (HomePageDZB.commonActivities .get(i)); isHomePageDZB.finish(); } catch (Exception e) { } } commonActivities.add(this); asyncImageLoader = ((CeiApplication) (this.getApplication())).asyncImageLoader; gestureDetector = new GestureDetector(this, new MyGestureDetector()); index = 0; SharedPreferences settings = getSharedPreferences("loginInfo", Activity.MODE_PRIVATE); loginName = settings.getString("LOGINNAME", ""); Typeface fontFace = Typeface.createFromAsset(getAssets(), "fonts/FZCQJW.TTF"); TextView tv = (TextView) findViewById(R.id.homepage_dzb_login_text); TextView tv2 = (TextView) findViewById(R.id.homepage_dzb_login_text_2); tv.setTypeface(fontFace); tv2.setTypeface(fontFace); if (!loginName.equals("")) { tv.setText("欢迎您..."); tv2.setText(loginName); } else { } findViewById(R.id.homepage_dzb_yjbg).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(HomePageDZB.this, ReadReportActivity.class); startActivity(intent); } }); findViewById(R.id.homepage_dzb_login).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if (loginName.equals("")) { Intent intent = new Intent(HomePageDZB.this, LoginActivity.class); startActivity(intent); } } }); installDataForView(); // 检测图片的加载个数,超过2秒的显示加载好的图片 new Handler().postDelayed(new Runnable() { @Override public void run() { initRLRView(); } }, 2000); for(int i=0;i<firstColumnEntries.size();i++){ if(firstColumnEntries.get(i).getName().contains("报告")){ ((CeiApplication)(getApplication())).nowStart=firstColumnEntries.get(i).getName(); } } startActivity(new Intent().setClass(this, ReadReportActivity.class)); this.finish(); } @Override protected void onResume() { initRLRView(); super.onResume(); } /** * 加载数据 */ private void installDataForView() { textNum = (TextView) findViewById(R.id.home_page_main_num); findViewById(R.id.button1).setOnClickListener(this); botton1 = (ImageView) findViewById(R.id.home_announcement); botton1.setOnClickListener(this); botton2 = (ImageView) findViewById(R.id.home_witsea); botton2.setOnClickListener(this); botton3 = (ImageView) findViewById(R.id.home_ceinet); botton3.setOnClickListener(this); botton4 = (ImageView) findViewById(R.id.home_personcenter); botton4.setOnClickListener(this); botton5 = (ImageView) findViewById(R.id.home_disclaimer); botton5.setOnClickListener(this); leftre = (RelativeLayout) findViewById(R.id.homepage_re_left); leftre.setOnTouchListener(this); righttre = (RelativeLayout) findViewById(R.id.homepage_re_right); righttre.setOnTouchListener(this); leftImageView[0] = (ImageView) findViewById(R.id.homepage_left_top); leftImageView[1] = (ImageView) findViewById(R.id.homepage_left_mid); leftImageView[2] = (ImageView) findViewById(R.id.homepage_left_botton); rightImageView[0] = (ImageView) findViewById(R.id.homepage_right_top); rightImageView[1] = (ImageView) findViewById(R.id.homepage_right_mid); rightImageView[2] = (ImageView) findViewById(R.id.homepage_right_botton); columnEntry = ((CeiApplication) getApplication()).columnEntry; columnEnties = new ArrayList<ColumnEntry>(); firstColumnEntries = columnEntry .getEntryChildsForParent(null); this.columnEntry.getWitSeaColumns().clear(); for (int i = 0; i < firstColumnEntries.size(); i++) { boolean isModels = false; ColumnEntry columnEntry = firstColumnEntries.get(i); for (int j = 0; j < MODELS.length; j++) { if ((MODELS[j]).equals(columnEntry.getName())) { isModels = true; columnEnties.add(columnEntry); } } if (!isModels && !columnEntry.getName().equals("关于我们")) this.columnEntry.getWitSeaColumns().add(columnEntry); } columnEnties.addAll(columnEntry.getSelectColumnEntryChilds()); // 加载左右的图片 calculateRLBitmap(columnEnties); home_page_re = (RelativeLayout) findViewById(R.id.home_page_re); home_page_re.setBackgroundResource(R.drawable.welcome_background); ImageResourse imageResource = new ImageResourse(); imageResource.setIconUrl(columnEntry.getBackground()); imageResource.setIconId(columnEntry.getBackground()); asyncImageLoader.loadDrawable(imageResource, new AsyncImageLoader.ImageCallback() { @Override public void imageLoaded(Drawable drawable, String path) { home_page_re.setBackgroundDrawable(drawable); } }); refreshListData(); } /** * 加载业务图片 * * @param list * @param iv * @param index */ private void initLRView(List<Drawable> list, ImageView[] iv, int index) { for (int y = 0; y < iv.length; y++) { iv[y].setVisibility(View.INVISIBLE); } if ((list.size() % 3 == 0 ? list.size() / 3 : list.size() / 3 + 1) >= index) { int x = 0; for (int j = index * 3; j < list.size() && x < 3; j++) { final ImageView currentIv = iv[x]; currentIv.setVisibility(View.VISIBLE); Drawable currentDrawable = list.get(j); x++; currentIv.setBackgroundDrawable(currentDrawable); Iterator<LRBitmap> itr = lrbs.keySet().iterator(); while (itr.hasNext()) { LRBitmap lrKey = itr.next(); Drawable dra = lrbs.get(lrKey); // 为模块设置跳转事件 if (dra.equals(currentDrawable)) { currentIv.setTag(lrKey); currentIv.setOnClickListener(this); } } } } } /** * 点击事件 */ @Override public void onClick(final View view) { Intent intent = null; switch (view.getId()) { case R.id.home_announcement: intent = new Intent(HomePageDZB.this, Announcement.class); if (!loginName.equals("")) { startActivity(intent); textNum.setVisibility(View.GONE); } else { Toast.makeText(this, "请登陆后查看!", Toast.LENGTH_SHORT).show(); } break; case R.id.home_witsea: intent = new Intent(HomePageDZB.this, WitSeaActivity.class); if (!loginName.equals("")) startActivity(intent); else Toast.makeText(this, "请登陆后查看!", Toast.LENGTH_SHORT).show(); break; case R.id.home_ceinet: intent = new Intent(HomePageDZB.this, WebViewUtil.class); intent.putExtra("path", "http://mob.cei.gov.cn/"); startActivity(intent); break; case R.id.home_personcenter: intent = new Intent(HomePageDZB.this, PersonCenter.class); if (!loginName.equals("")) startActivity(intent); else Toast.makeText(this, "请登陆后查看!", Toast.LENGTH_SHORT).show(); break; case R.id.home_disclaimer: intent = new Intent(HomePageDZB.this, Disclaimer.class); startActivity(intent); break; case R.id.button1: intent = new Intent(HomePageDZB.this, InformationMainActivity.class); startActivity(intent); break; default: goModelAc(((LRBitmap) view.getTag()).getName()); break; } } /** * 根据name跳转activity * * @param name */ public void goModelAc(String name) { if (name == null) return; if (name.equals("移动学习") || name.contains("学习")) { HomePageActivity.MODEL_NAME = name; Intent intent = new Intent(HomePageDZB.this, HomePageActivity.class); startActivity(intent); } if (name.equals("政经资讯") || name.contains("资讯")) { Intent intent = new Intent(HomePageDZB.this, InformationMainActivity.class); intent.putExtra("tag", name); startActivity(intent); } if (name.equals("研究报告") || name.contains("报告")) { Intent intent = new Intent(HomePageDZB.this, ReadReportActivity.class); startActivity(intent); } if (name.equals("经济数据") || name.contains("数据")) { Intent intent = new Intent(HomePageDZB.this, EconDataMain.class); startActivity(intent); } ((CeiApplication) (getApplication())).nowStart = name; addLog(name); } /** * 加入操作日志 */ private void addLog(final String title) { new Thread(new Runnable() { @Override public void run() { ColumnEntry columnEntry = new ColumnEntry(); for (int i = 0; i < ((CeiApplication) (HomePageDZB.this .getApplication())).columnEntry.getColumnEntryChilds() .size(); i++) { if (title.equals(((CeiApplication) (HomePageDZB.this .getApplication())).columnEntry .getColumnEntryChilds().get(i).getName())) columnEntry.setId(((CeiApplication) (HomePageDZB.this .getApplication())).columnEntry .getColumnEntryChilds().get(i).getId()); } columnEntry.setLoginid(((CeiApplication) (HomePageDZB.this .getApplication())).columnEntry.getLoginid()); columnEntry.setName(title); Service.addLog(columnEntry); } }).start(); } class MyGestureDetector extends SimpleOnGestureListener { private static final int SWIPE_MIN_DISTANCE = 10; @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE) { updateViewByIndex(upper); } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && index > 0) { updateViewByIndex(downward); } return true; } } @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; } @Override public boolean onTouch(View v, MotionEvent event) { HomePageDZB.this.onTouchEvent(event); return true; } private void upAnimation(View v) { Animation up = AnimationUtils.loadAnimation(this, R.anim.push_up); v.setAnimation(up); } private void downAnimation(View v) { Animation down = AnimationUtils.loadAnimation(this, R.anim.push_down); v.setAnimation(down); } private void refreshListData() { executorService.submit(new Runnable() { @Override public void run() { announcementCount = 0; announcementNews = new ArrayList<AnnouncementNews>(); String rs = ""; rs = Service .queryNotice(((CeiApplication) getApplication()).columnEntry .getUserId()); try { announcementNews = XmlUtil.getAnnouncement(rs); announcementCount = announcementNews.size(); SharedPreferences settings = getSharedPreferences( "announcementCount", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("new", announcementCount); editor.commit(); } catch (Exception e) { e.printStackTrace(); } Message msg = newsHandler.obtainMessage(); newsHandler.sendMessage(msg); } }); } Handler newsHandler = new Handler() { public void handleMessage(Message msg) { SharedPreferences settings = getSharedPreferences( "announcementCount", Activity.MODE_PRIVATE); int changeCount = settings.getInt("new", 0) - settings.getInt("old", 0); if (changeCount > 0) { textNum.setText(changeCount + ""); textNum.setVisibility(View.VISIBLE); } else { textNum.setVisibility(View.GONE); } } }; /** * 判断是否为左面的图片样式 * * @param drawable * @return */ private boolean decernBitmpaL(Drawable drawable) { Bitmap targetBitmap = ((BitmapDrawable) drawable).getBitmap(); int width = targetBitmap.getWidth(); int height = targetBitmap.getHeight(); int pixel = targetBitmap.getPixel(width - 3, height - 1); if (pixel == 0) return false; return true; } /** * 统计左边与右边的Bitmap * * @param columnEnties */ private void calculateRLBitmap(List<ColumnEntry> columnEnties) { for (int i = 0; i < columnEnties.size(); i++) { getDrawables(columnEnties.get(i), columnEnties.size(), i); } } // 记录图片完成加载的个数 private int alLoadIvCount; // 左右两边的图片缓存集合 private Map<LRBitmap, Drawable> lrbs = new HashMap<LRBitmap, Drawable>(); // 左边的图片集合 private List<Drawable> leftDrawables = new ArrayList<Drawable>(); // 右边的图片集合 private List<Drawable> rightDrawables = new ArrayList<Drawable>(); /** * 获取所有业务图片,并分开左右 * * @param path * @param convertView */ public void getDrawables(ColumnEntry columnEntry, final int totalNum, int imageLevel) { final LRBitmap lrb = new LRBitmap(); lrb.setLevel(imageLevel); lrb.setName(columnEntry.getName()); ImageResourse imageResource = new ImageResourse(); imageResource.setIconUrl(columnEntry.getOperationImage()); imageResource.setIconId(columnEntry.getId()); imageResource.setIconTime(columnEntry.getIssueTime()); asyncImageLoader.loadDrawable(imageResource, new AsyncImageLoader.ImageCallback() { @Override public void imageLoaded(Drawable drawable, String path) { alLoadIvCount++; if (drawable != null) { // if (decernBitmpaL(drawable)) if (lrb.getLevel() % 2 == 0) lrb.setLeft(true); lrbs.put(lrb, drawable); } // 图片加载完则更新视图 if (alLoadIvCount == totalNum) initRLRView(); } }); } /** * 更新已经加载好的图片 */ private void initRLRView() { index = 0; Set<LRBitmap> itr = lrbs.keySet(); leftDrawables.clear(); rightDrawables.clear(); LRBitmap[] lRBitmaps = new LRBitmap[itr.size()]; Iterator<LRBitmap> iterator = itr.iterator(); for (int i = 0; i < lRBitmaps.length; i++) { lRBitmaps[i] = iterator.next(); } bubbleSort(lRBitmaps); for (int i = 0; i < lRBitmaps.length; i++) { LRBitmap lrKey = lRBitmaps[i]; Drawable dra = lrbs.get(lrKey); if (lrKey.isLeft()) leftDrawables.add(dra); else rightDrawables.add(dra); } initLRView(rightDrawables, rightImageView, 0); initLRView(leftDrawables, leftImageView, 0); } // 冒泡排序, pnData要排序的数据, nLen数据的个数 private int bubbleSort(LRBitmap[] lRBitmaps) { boolean isOk = false; // 设置排序是否结束的哨兵 // i从[0,nLen-1)开始冒泡,确定第i个元素 for (int i = 0; i < lRBitmaps.length - 1 && !isOk; ++i) { isOk = true; // 假定排序成功 // 从[nLen - 1, i)检查是否比上面一个小,把小的冒泡浮上去 for (int j = lRBitmaps.length - 1; j > i; --j) { if (lRBitmaps[j].getLevel() < lRBitmaps[j - 1].getLevel()) // 如果下面的比上面小,交换 { LRBitmap nTemp = lRBitmaps[j]; lRBitmaps[j] = lRBitmaps[j - 1]; lRBitmaps[j - 1] = nTemp; isOk = false; } } } return 1; } // 向上操作 private final static int upper = 1; // 向下操作 private final static int downward = 2; /** * 根据页码更新左右两方的视图 */ private void updateViewByIndex(int operationKey) { switch (operationKey) { case upper: upAnimation(leftre); upAnimation(righttre); break; case downward: downAnimation(leftre); downAnimation(righttre); break; } boolean isChangeIndex = false; if ((index + 1) < (leftDrawables.size() % 3 == 0 ? leftDrawables.size() / 3 : leftDrawables.size() / 3 + 1) || (operationKey == downward && index >= 0)) { isChangeIndex = true; switch (operationKey) { case upper: index++; break; case downward: index--; break; } initLRView(leftDrawables, leftImageView, index); initLRView(rightDrawables, rightImageView, index); } } private PopupWindow popWin; private void alertIsSurePop(OnClickListener clickListener) { try{ View popView = this.getLayoutInflater().inflate( R.layout.phone_study_issure, null); popView.findViewById(R.id.phone_study_issure_sure_btn) .setOnClickListener(clickListener); popView.findViewById(R.id.phone_study_issure_cancel_btn) .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { popWin.dismiss(); } }); ((TextView) popView.findViewById(R.id.issure_title)) .setText("是否继续下载课件?"); popWin = new PopupWindow(popView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); popWin.setFocusable(true); popWin.showAtLocation(this.getWindow().getDecorView(), Gravity.CENTER, 0, 0); }catch(Exception e){ e.printStackTrace(); } } }