美文网首页
凤凰demo小节

凤凰demo小节

作者: qianxL | 来源:发表于2016-09-03 21:16 被阅读0次

凤凰demo小节

  • 再做一个demo时呢,首先一定得确定需求,具体实现先放一边。

  • 再以需求为目的,扩展出需要的工具,与之涉及的实体类。

  • 也应确定大致需要用到那些控件,对每个控件的应用呢都应该有基本的认识。

  • 千万不能忘记在androidManifest 中添加应用需要的权限。

新认识的控件

  • StaggeredGridLayoutManager类是RecyclerView的另一个布局管理类,其类构造函数接收两个参数,参数一为同一个水平(或同一个垂直)有几个子项布局,参数二为子项布局放置方向。

  • cardView 多用在RecyclerView中的子项布局,以卡片的形式包裹内容。容器类型的布局。

  • circleimageview 此控件呢会把bitmap的图片以圆形的形式显示。

  • glide是一个自带缓存的图片加载库。
    基本的使用方式如下所示:

      public static void  loadpicture(String url, ImageView view){
          Glide.with(MyApplicatioin.getContext()).
              load(url).
              error(R.drawable.ic_image_loadfail).
              into(view);
      }
    

    with方法参数要传入Context参数,以构建环境,

    load方法参数传入需要加载的图片url(即图片地址)。

    error方法参数传入在没有找到图片url的情况下(错误),显示的图片。

    into方法参数为需要显示图片的View 控件。

保存图片的方法

需注意的地方有:保存位图时呢,调用bitmap对象的compress方法()就可保存图片,此方法呢接收三个参数。参数一为保存bitmap的格式,一般有png与jpg
,参数二图片的压缩率,无论是那种格式千万不能传入100即意为100%的压缩率,程序会崩溃的。参数三保存位图的fileOutputStream对象。以png格式保存图片呢,多少的压缩率都无所谓。
构建bitmap保存的路径时,并不需要文件的存在,有路径就好,compress方法会自动创建文件。在保存时最好开启子线程来做事,用java流写文件还是蛮费时的。当使用glide加载图片后呢,要获取imageView的bitmap一定把imageView对象getDrawable()获取的对象转型为GlideBitmapDrawable然后再用getBitmap()方法获取位图,这样才能保存进去。

public static File file;

public synchronized static Boolean saveBitmap(final Bitmap bitmap , String jpgMark) {
    try {
        file = new File(Environment.getExternalStoragePublicDirectory("Icon"),"zuimei"+jpgMark+".png");
        if(!file.exists()){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    FileOutputStream outputStream = null;
                    try {
                        outputStream = new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.PNG,99, outputStream);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }finally {
                        try {
                            if(outputStream != null) {
                                outputStream.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
            return true;
        }else {
            return false;
        }
    }catch (Exception e){
        e.printStackTrace();
        return false;
    }
}

问题小节

  • 编写RecyclerView的子项视图时呢,高度设置成wrap-content就好,或者显示图片的子项视图呢直接规定需要多少dp就好。

  • 在编写RecyclerView的每个项目的点击事件时,直接在viewHolder对象构造函数里注册,可以提高性能。

        private OnitemClickListener itemlistener;
    
         public void setOnitemClickListener(OnitemClickListener listener) {
          this.itemlistener = listener;
      }
    
      class ZmImageHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
      private ImageView imageView;
      private TextView mText;
      public ZmImageHolder(View itemView) {
          super(itemView);
          itemView.setOnClickListener(this);
          imageView = (ImageView) itemView.findViewById(R.id.image_content_main2);
          mText = (TextView) itemView.findViewById(R.id.image_content_text2);
      }
      @Override
      public void onClick(View view) {
          if (itemlistener != null)
              itemlistener.onitemClick(view,zmlist.get(this.getLayoutPosition()));
          }
        }
      }
    

其中呢通过viewholder对象的getLayoutPosition()方法来获得当前position(子项布局位置)

  • 当两个碎片同时添加在同一个fragmelayout时,即时调用hide()了,也出现重叠时呢,一定要在fragment的根布局中设置背景为白色。

  • 在activity中用getSupportFragmentManager()方法呢可以获取到管理V4包里碎片的管理对象,但是如果需要在fragment中再使用碎片,就不能通过此方法获取FragmentManager对象,因可能出现白页情况。
    需使用getChildFragmentManager()方法来获取子碎片的fragmentManager对象,才能正确显示内容。

  • 某些情况下,一定要加对象为空的判断,不然极易出现空指针的情况。activity一般在调用finish()方法,那些view对象也就被回收了,因其主宿主都已经被销毁了。

  • 有些基本需要多次写的就应该创建一个父类,然后新类继承就好。比如activity 和 Fragment。


  • 当创建java流对象后,写完或读完后一定要调用close()方法关闭了。要得到最终的流对象,至少需要一个对象来装饰,第一个对象呢是最终写入或读取的目标,第二对象用来装饰流的行为。如果要操作的内容中含有中文时呢,还需要一个适配器对象把InputStream或OutputStream转换为Reader或Writer对象。

          inputStream = MyApplicatioin.getContext().openFileInput(filName);
          reader = new BufferedReader(new InputStreamReader(inputStream));
           outputStream = MyApplicatioin.getContext().openFileOutput(fileName, Context.MODE_PRIVATE);
           writer = new BufferedWriter(new OutputStreamWriter(outputStream));
    

  • 从服务器返回的json数据呢,有以下两种处理方式:

      private  String loadPhoenix(String response , int postion) throws JSONException {
      JSONArray jsonArray = new JSONArray(response);
      return jsonArray.getJSONObject(postion).getString("item");
      }
    
      private  String loadZm(String response) throws JSONException {
      JSONObject object = new JSONObject(response);
      return object.getJSONObject("data").getString("images");
      }
    

因view视图需要的实体类呢,会被一层层的包裹起来,所以就需提出我们需要那部分内容。
方法一对应的时,服务器直接返回的是数组形式,且属于item这个键名才能获取到。
方法二对应的是,服务返回的为对象,对象套对象,然后获取images的json内容。
json数据是通过键对值得形式保存的。{}表示对象,[]表示数组。


  • 透明状态栏和透明导航栏,在activity的onCreate方法中进行操作。(只有安卓5.0才支持)

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
          Window window = getWindow();
          window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                  |View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
          // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
          window.setNavigationBarColor(Color.TRANSPARENT);
          window.setStatusBarColor(Color.parseColor("#cccc99"));
      }
    

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION表示让应用的UI布局延伸到状态栏和导航栏.
一定不能少SYSTEM_UI_FLAG_LAYOUT_STABLE此flag。最后再把两者的颜色设置为透明色。

SYSTEM_UI_FLAG_HIDE_NAVIGATION和
SYSTEM_UI_FLAG_FULLSCREEN表示直接把状态栏和导航栏隐藏。
SYSTEM_UI_FLAG_IMMERSIVE_STICKY表示让应用内容变为沉浸式的,不为因点击就显示状态栏和导航栏,就像安卓游戏那样。

  • RecyclerView要设置OnScrollListener呢,通过addOnScrollListener()方法,要解除呢通过clearOnScrollListener()方法。复写

        public void onScrollStateChanged(RecyclerView recyclerView, int newState) 与 public void onScrolled(RecyclerView recyclerView, int dx, int dy) 。
    

参数newState为当前RecyclerView的状态值
RecyclerView.SCROLL_STATE_IDLE 表示视图不在滚动。

参数dx,dy为当前坐标,通过存储上次的值,两次再减就能得出滑动方向。

通过布局管理器对象的findLastVisibleItemPosition()方法获取子项最后可见的position,

  • 当使用DialogFragment时,用onCreateView()创建视图不加载时呢,就要使用onCreateDialog()方法,创建一个AlertDialog对象,并调用setView()方法显示的view,最后再返回一个AlerDialog 对象。

相关文章

  • 凤凰demo小节

    凤凰demo小节 再做一个demo时呢,首先一定得确定需求,具体实现先放一边。 再以需求为目的,扩展出需要的工具,...

  • 豆瓣Demo小节

    ViewPager 此控件呢主要用于左右滑动切换View,android.support.v4.view.View...

  • JS——blob

    1、【HTML5】Blob对象 (1)写在前面:本小节主要介绍Blob对象属性及作用,通过demo介绍blob对象...

  • 无声花落凤凰路第一小节

    第一小节 夜已深沉,人却不能寐。盈盈的月光洒满庭院,斑驳的树阴随风摆动,撩乱了魏明的头发。往常这个时候,魏明早已经...

  • 读书笔记:《我在碧桂园的1000》(4)

    凤凰涅磐 浴火重生 《我梦想中的碧桂园》诞生记‘ 这个小节说了下当时《我梦想中的碧桂园》是如何被写出来的,因为《我...

  • 小节

    没有走过红尘,何谈看破红尘,没有享受过富贵,何谈看透富贵,没有得到过名利,何谈不慕名利,没有机会得到,同样也没有资...

  • 小节

    期中考试已结束,下半学期的重点:一是加大孩子们阅读的时间;二是减去对孩子们写日记的字数要求,主抓孩子们写的日记的质...

  • 小节

    各位老师傅好 我叫Xx 九零后 在XX技术有限公司工作 公司以科技推广和应用服务业为主承接各科研机构 散劣中子加速...

  • 小节

    也有一个月没写简书了,这一个月也在为秋招奔波,还好找到了一个实习转正的机会,现在在北京奋斗着,也挺好~ 希望能转正...

  • 小节

    从前车马慢

网友评论

      本文标题:凤凰demo小节

      本文链接:https://www.haomeiwen.com/subject/hmflettx.html