校园助手APP--主界面
来源:互联网 发布:电脑计时器软件 编辑:程序博客网 时间:2024/04/25 12:32
登陆成功后进入主界面,主界面是个九宫格
public classHomeActivity extends Activity implements IAssistantActivity{ private static final String TAG ="HomeActivity"; private GridView myGridView = null; private TextView tvUserName = null; private CircleImageView user_Icon = null; private MenuSlidingDrawer sliding = null; private SimpleAdapter simpleAdapter ; private Button btn_exit = null; private Button btn_logout = null; @Override protected void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); // 显示标题,以下三行代码顺序不可变 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); super.setContentView(R.layout.home); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar_main); // titlebar为自己标题栏的布局 // 设置标题 TextView tvMainTitle = (TextView)findViewById(R.id.main_title); tvMainTitle.setText("微高校-WIT"); init(); } @Override public void init() { tvUserName = (TextView)findViewById(R.id.userName); user_Icon = (CircleImageView)findViewById(R.id.user_icon); //读取默认用户 if (null == MainService.nowUser) { MainService.nowUser =SharedPreferencesUtil.getLoginUser(HomeActivity.this); } // tvUserName.setText(MainService.nowUser.getUserName()); tvUserName.setText("张三"); //读取用户的头像,还未完成 if (-1 <MainService.nowUser.getIconIndex()) { user_Icon.setImageDrawable(getResources().getDrawable(MainService.nowUser.getIconIndex())); }else { user_Icon.setImageDrawable(getResources().getDrawable(R.drawable.portrait_1)); } //抽屉效果的菜单 sliding = (MenuSlidingDrawer)findViewById(R.id.slidingdrawer);; btn_logout = (Button)findViewById(R.id.btn_logout); btn_exit = (Button)findViewById(R.id.btn_exit); btn_logout.setOnClickListener(newOnClickListener() { @Override public void onClick(View v){ Intent intent = newIntent(HomeActivity.this, LoginActivity.class); startActivity(intent); overridePendingTransition(SwitchActivityAnim.leftIn(),SwitchActivityAnim.leftOut()); HomeActivity.this.finish(); MainService.nowUser =null ; } }); //退出程序 btn_exit.setOnClickListener(newOnClickListener() { @Override public void onClick(View v){ MainService.appExit(HomeActivity.this); HomeActivity.this.finish(); } }); //主界面的初始化布局 this.myGridView = (GridView)findViewById(R.id.myGridView); int screenWidth =getWindowManager().getDefaultDisplay().getWidth(); int screenHeight =getWindowManager().getDefaultDisplay().getHeight(); LinearLayout.LayoutParams lp = newLinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);// int letf = (int) (screenWidth*0.06); int top = (int)(screenHeight*0.06);// int right = (int)(screenWidth*0.06); int bottom = (int)(screenHeight*0.02); lp.width = (int)screenWidth;// lp.width = (int)(screenWidth * 0.9); lp.height = (int)(screenHeight *0.6); lp.setMargins(0, top, 0, bottom);// myGridView.setLayoutParams(lp); //数据的初始化 ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> map1= new HashMap<String, Object>(); map1.put("myimgView",R.drawable.main_infoquery); map1.put("mytxt",ConstantValues.INFOQUERY); list.add(map1); HashMap<String, Object> map2= new HashMap<String, Object>(); map2.put("myimgView",R.drawable.main_dingcan); map2.put("mytxt",ConstantValues.DINGCAN); list.add(map2); HashMap<String, Object> map3= new HashMap<String, Object>(); map3.put("myimgView",R.drawable.main_schoolnews); map3.put("mytxt",ConstantValues.SCHOOLNEWS); list.add(map3); HashMap<String, Object> map4= new HashMap<String, Object>(); map4.put("myimgView",R.drawable.main_library); map4.put("mytxt",ConstantValues.LIBRARY); list.add(map4); HashMap<String, Object> map5= new HashMap<String, Object>(); map5.put("myimgView",R.drawable.main_schoolmap); map5.put("mytxt",ConstantValues.SCHOOLMAP); list.add(map5); HashMap<String, Object> map6= new HashMap<String, Object>(); map6.put("myimgView",R.drawable.main_tieba); map6.put("mytxt",ConstantValues.TIEBA); list.add(map6); HashMap<String, Object> map7= new HashMap<String, Object>(); map7.put("myimgView",R.drawable.main_schoolnews); map7.put("mytxt",ConstantValues.FEEDBACK); list.add(map7); HashMap<String, Object> map8= new HashMap<String, Object>(); map8.put("myimgView",R.drawable.main_more); map8.put("mytxt",ConstantValues.MORE); list.add(map8); HashMap<String, Object> map9= new HashMap<String, Object>(); map9.put("myimgView",R.drawable.main_aboutus); map9.put("mytxt",ConstantValues.ABOUTUS); list.add(map9); simpleAdapter = newSimpleAdapter(this, list, R.layout.home_grid_layout,new String[] { "myimgView", "mytxt" }, new int[] {R.id.myimgView, R.id.mytxt }); myGridView.setAdapter(simpleAdapter); myGridView.setOnItemClickListener(newItemClickListener()); myGridView.setSelector(newColorDrawable(Color.TRANSPARENT)); sliding.setOnDrawerOpenListener(newOnDrawerOpenListener() { @Override public void onDrawerOpened(){ } }); sliding.setOnDrawerCloseListener(newOnDrawerCloseListener() { @Override public void onDrawerClosed(){ } }); } class ItemClickListener implementsOnItemClickListener { @Override public voidonItemClick(AdapterView<?> arg0, View view, int index, long arg3) { @SuppressWarnings("unchecked") HashMap<String,Object> item = (HashMap<String, Object>) arg0 .getItemAtPosition(index); String txt = (String) item.get("mytxt"); Intent intent = null; if(ConstantValues.INFOQUERY.equals(txt)) { intent = newIntent(HomeActivity.this, InfoQueryActivity.class); } else if(ConstantValues.DINGCAN.equals(txt)) { intent = newIntent(HomeActivity.this, StoreListActivity.class); } else if(ConstantValues.SCHOOLNEWS.equals(txt)) { intent = newIntent(HomeActivity.this, NewsActivity.class); } else if(ConstantValues.LIBRARY.equals(txt)) { intent = newIntent(HomeActivity.this, LibraryActivity.class); } else if(ConstantValues.SCHOOLMAP.equals(txt)) { intent = newIntent(HomeActivity.this, TencentMapActivity.class); } else if(ConstantValues.TIEBA.equals(txt)) { intent = newIntent(HomeActivity.this, TieBaActivity.class); } else if(ConstantValues.ABOUTUS.equals(txt)) { intent = newIntent(HomeActivity.this, TieBaActivity.class); } else if(ConstantValues.FEEDBACK.equals(txt)) { intent = newIntent(HomeActivity.this, SchoolNewsActivity.class); } else if(ConstantValues.MORE.equals(txt)) { intent = newIntent(HomeActivity.this, ExpressActivity.class); } Log.i(TAG,view.getClass().getName()); startActivity(intent); overridePendingTransition(SwitchActivityAnim.upIn(),SwitchActivityAnim.upOut()); } } //框架中刷新界面的 @Override public void refresh(Object... params) { //更新主界面 } @Override public boolean onKeyDown(int keyCode,KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK:{ if (sliding.isOpened()) { sliding.animateClose(); return true; }else { moveTaskToBack(false); return false; } } //菜单键,弹出抽屉 case KeyEvent.KEYCODE_MENU:{ sliding.animateToggle(); break; } default: break; } return super.onKeyDown(keyCode,event); }}
主界面主要就是抽屉的使用,以及用户圆圈头像的处理。
主界面的布局文件内容如下:
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_home2" > <RelativeLayout android:id="@+id/grideview" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- <LinearLayout android:layout_width="match_parent" android:layout_height="120dp" android:gravity="left" android:layout_alignParentTop="true" android:orientation="horizontal" > <ImageView android:id="@+id/weather_img" android:layout_width="wrap_content" android:layout_height="match_parent" android:src="@drawable/weather" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="150dp" android:layout_gravity="center" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/weather_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/color_text" android:textSize="20sp" android:text="多 云" /> <TextView android:id="@+id/weather_temper" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/color_text" android:textSize="20sp" android:text="11℃~23℃" /> </LinearLayout> </LinearLayout> --> <GridView android:id="@+id/myGridView" android:layout_width="match_parent" android:layout_height="320dp" android:layout_centerInParent="true" android:numColumns="3" android:padding="10dp" android:horizontalSpacing="20dp" android:verticalSpacing="20dp" /> </RelativeLayout> <cn.edu.wit.withelper.util.MenuSlidingDrawer android:id="@+id/slidingdrawer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:content="@+id/content" android:handle="@+id/handle" android:topOffset="0dp" android:allowSingleTap="false" android:layout_gravity="bottom" android:orientation="vertical" > <LinearLayout android:id="@id/handle" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <cn.edu.wit.withelper.util.CircleImageView android:id="@+id/user_icon" android:layout_width="90sp" android:layout_height="90sp" android:layout_marginLeft="30dp" android:src="@drawable/portrait_1" /> <TextView android:id="@+id/userName" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_horizontal|center_vertical" android:gravity="center" android:textColor="@color/white" android:textSize="25sp" android:text="极星文化传媒" /> </LinearLayout> <LinearLayout android:id="@id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical" > <Button android:id="@+id/btn_logout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="注销当前账号" android:textSize="25sp" android:padding="5dp" android:layout_margin="3dp" android:textColor="@color/black" android:background="@drawable/btn_logout"/> <Button android:id="@+id/btn_exit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="退出" android:textSize="25sp" android:padding="5dp" android:layout_margin="3dp" android:textColor="@color/black" android:background="@drawable/btn_exit"/> </LinearLayout> </cn.edu.wit.withelper.util.MenuSlidingDrawer> </FrameLayout>
中间注释的部分,是准备添加天气到九宫格的上方。
抽屉部分是自定义的一个控件
public classMenuSlidingDrawer extends SlidingDrawer { private boolean mVertical; private int mTopOffset; public static int slidingHight ; public MenuSlidingDrawer(Context context,AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); int orientation = attrs.getAttributeIntValue("android","orientation", ORIENTATION_VERTICAL); mTopOffset =attrs.getAttributeIntValue("android", "topOffset", 0);//设置抽屉上方间距为0 mVertical = (orientation ==SlidingDrawer.ORIENTATION_VERTICAL);//判断屏幕方向,方便下面根据屏幕方向计算抽屉的高度 } public MenuSlidingDrawer(Context context,AttributeSet attrs) {//与上面的构造函数差不多,以前用的时候没有仔细看,这个类可以再精简一些 super(context, attrs); int orientation =attrs.getAttributeIntValue("android", "orientation", ORIENTATION_VERTICAL); mTopOffset =attrs.getAttributeIntValue("android", "topOffset", 0); mVertical = (orientation ==SlidingDrawer.ORIENTATION_VERTICAL); } @Override protected void onMeasure(intwidthMeasureSpec, int heightMeasureSpec) { int widthSpecMode =MeasureSpec.getMode(widthMeasureSpec); int widthSpecSize =MeasureSpec.getSize(widthMeasureSpec);//获取屏幕的宽度 int heightSpecMode =MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize =MeasureSpec.getSize(heightMeasureSpec);//获取屏幕的高度 final View handle = getHandle(); final View content = getContent(); measureChild(handle,widthMeasureSpec, heightMeasureSpec); if(mVertical) {//竖屏 int height = heightSpecSize- handle.getMeasuredHeight() - mTopOffset ;//这时handle的顶端与屏幕顶端的距离 content.measure(widthMeasureSpec,MeasureSpec.makeMeasureSpec(height, heightSpecMode)); heightSpecSize =handle.getMeasuredHeight() + mTopOffset + content.getMeasuredHeight();//这是整个抽屉控件的高度 widthSpecSize =content.getMeasuredWidth(); if(handle.getMeasuredWidth() > widthSpecSize) widthSpecSize =handle.getMeasuredWidth();//宽度以handle为准 } else {//横屏 int width = widthSpecSize -handle.getMeasuredWidth() - mTopOffset; getContent().measure(MeasureSpec.makeMeasureSpec(width,widthSpecMode),heightMeasureSpec); widthSpecSize =handle.getMeasuredWidth() + mTopOffset + content.getMeasuredWidth(); heightSpecSize =content.getMeasuredHeight(); if(handle.getMeasuredHeight() > heightSpecSize) heightSpecSize =handle.getMeasuredHeight(); } slidingHight =handle.getMeasuredWidth() + content.getMeasuredWidth();//感觉这句没啥用 setMeasuredDimension(widthSpecSize,heightSpecSize); }}
把头像处理成圆形的也是网上找的一段代码
public classCircleImageView extends ImageView implements View.OnClickListener{ // private static final String TAG ="CircleImageView"; private Paint mPaint = new Paint(); private static final int STROKE_WIDTH = 8;//圆头像外面的一圈白色环的宽度 public CircleImageView(Context context,AttributeSet attrs) { super(context, attrs); } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (null != drawable) { Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); Bitmap b =circleBitmap(scaleBitmap(bitmap));//先更改图像的尺寸,避免裁剪圆形时把有用的部分去掉了;再在方形的图片内裁剪一个内切圆,然后在圆形外面加一圈白色的环 final Rect rect = new Rect(0, 0,b.getWidth(), b.getHeight()); mPaint.reset(); canvas.drawBitmap(b, rect, rect,mPaint); } else { super.onDraw(canvas); } } // 将矩形图片绘制成圆形图片并在最外围画一圈白色 private Bitmap circleBitmap(Bitmap bitmap){ Bitmap output =Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff000000; final Rect rect = new Rect(0, 0,bitmap.getWidth(), bitmap.getHeight()); mPaint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); mPaint.setColor(color); final int width = bitmap.getWidth(); canvas.drawCircle(width / 2, width / 2,width / 2, mPaint);//内切圆,如果是长方形,则以宽度的一半为半径 mPaint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect,mPaint);//将图片绘制成白色图片 //画白色圆圈 mPaint.reset(); mPaint.setColor(Color.WHITE); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(STROKE_WIDTH); mPaint.setAntiAlias(true); canvas.drawCircle(width/2, width/2, width/2 - STROKE_WIDTH/2, mPaint); return output; } /** * change the bitmap size * @param src : Bitmap source * @return : The scaled bitmap */ private Bitmap scaleBitmap(Bitmap src) { int width = src.getWidth();//原来尺寸大小 int height = src.getHeight(); final float destSize =this.getWidth();//缩放到这个大小 //图片缩放比例,新尺寸/原来的尺寸 float scaleWidth = ((float) destSize) /width; float scaleHeight = ((float) destSize)/ height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth,scaleHeight); //返回缩放后的图片 return Bitmap.createBitmap(src, 0, 0,width, height, matrix, true); } @Override public void onClick(View v) { //To change body of implemented methodsuse File | Settings | File Templates. }}
有一点特地拿出来说一下,
GridView.setSelector(newColorDrawable(Color.TRANSPARENT));
若没有这一句话,点击选项时会出现橙色的背景,很丑,
解决办法就是手动的把背景设置为透明,或者自定义的图片,来保证主题的统一。同样的还有输入框获得焦点是的橙色边框。
0 0
- 校园助手APP--主界面
- 校园助手APP-登陆
- 校园助手APP--登陆
- 校园助手APP--简介及框架
- 网页抓包实例---校园助手app
- 校园助手APP--WebView显示校园贴吧
- 校园助手APP--启动logo及导航页
- 校园助手APP--访问服务器获取数据,包含安全校验
- 校园助手APP--昨天看代码发现了一个好东西——UncaughtExceptionHandler
- 校园助手APP--腾讯地图的集成使用(含街景)
- 校园助手APP--爬取教务处网页,并解析出数据
- jquery mobile + 百度地图 + phonegap 写的一个"校园助手"的app
- Android App App助手、应用助手
- App主界面比较
- 简洁界面代码助手
- 心理助手app
- 校园GIS项目界面
- UTips校园资讯助手用户体验报告
- C#打开颜色对话框
- poj 1703 Find them, Catch them (并查集)
- dmidecode
- android--code--从路径获取bitmap对象
- 20140503-Persisitent Contrastive Divergence (持续的逆向差异)
- 校园助手APP--主界面
- map的使用
- 沙盒相关
- 一个程序员的起步
- 命令行程序的地位与作用
- 双十一还用苹果购物吗?iOS漏洞令iPhone和iPad面临被黑风险
- myeclipse6.5 blue注册 Enter or update your subscription information.
- 加密学教程(Cryptography Tuturials)目录
- 基于SignalTap的FPGA调试