校园助手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
原创粉丝点击