面試記錄

中華新聞

  • 側(cè)邊欄
    setContentView(R.layout.activity_main);
    // 添加側(cè)邊欄
    setBehindContentView(R.layout.left_menu);
    SlidingMenu slidingMenu = getSlidingMenu();
    // 全屏觸摸
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    // 屏幕預留200像素
    // 代碼適配
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    slidingMenu.setBehindOffset((int) (width * 0.625));
    initFragment();
  • 填充碎片
    private void initFragment() {
    // Fragment管理器
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();// 開始事務
    // 將幀布局替換為對應的Fragment
    transaction
    .replace(R.id.fl_content, new ContentFragment(), TAG_CONTENT);
    transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),
    TAG_LEFT_MENU);
    transaction.commit();// 提交事務
    // fm.findFragmentByTag(TAG_CONTENT);
    }
  • 事件的分發(fā)機制
    分發(fā)機制
  • 側(cè)邊欄有
    第三方登入:
    友盟+
    Mob Android Single Sign-On (SSO)
    跳轉(zhuǎn)到登入界面:
    @Override
    public void next_activity() {
    // 跳轉(zhuǎn)到第二個界面
    Intent intent = new Intent(this, SetUp2Activity.class);
    startActivity(intent);
    finish();
    //執(zhí)行平移動畫
    //執(zhí)行界面切換動畫的操作,是在startActivity或者finish之后執(zhí)行
    //enterAnim : 新的界面進入的動畫
    //exitAnim : 舊的界面退出的動畫
    overridePendingTransition(R.anim.setup_enter_next, R.anim.setup_exit_next);
    }
    動畫效果:
    setup_enter_next android:fromXDelta="100%" android:toXDelta="0"
    setup_exit_next android:fromXDelta="0%" android:toXDelta="-100"
  • 主頁
    0. 整個是個viewPager
    1. topBar
    2. viewPagerIndicator(第三方工具)
    3.子嵌套的viewPager,可以修改viewPager的源碼
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    this.getParent().requestDisallowInterceptTouchEvent(true);
    return super.dispatchTouchEvent(ev);
    }
    3. listView
    TextView ImgerView組成(3小時前)
    有圖片就VISIBIbY,沒有圖片就GONE
    4. PullToRefresh(沒有用到)
    被Goggle官方出品的SwiperRefreshLayout(自動刷新)代替啦,
    好想是android5.0 出現(xiàn)的各聘,知乎就是這的這個俩檬。
    5. 加載數(shù)據(jù)
    xutls中的htttpUtils
    還有android自帶的HttpURLConnection(URLConnection的子類)
    conn = (HttpURLConnection) new URL(url).openConnection();
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);
    conn.setRequestMethod("GET");
    conn.connect();

          int code = conn.getResponseCode();
          if (code == 200) {
              InputStream is = conn.getInputStream();
              Bitmap bitmap = BitmapFactory.decodeStream(is);
              // 將圖片存到本地
              localCacheUtils.setBitmapToLocal(bitmap, url);
              // 將圖片存到內(nèi)存
              memoryCacheUtils.setBitmapToMemory(url, bitmap);
              return bitmap;
          }
      6. 網(wǎng)絡請求哪家強
               優(yōu)先推薦Retrofit, 需要遵循RESTful的風格和能力掌握
               Volley, 畢竟Volley你不需要做過度的封裝, 當然不適合傳大數(shù)據(jù)(圖片)式撼。
               okHttp性能最高, 但是必須要做一些封裝佳吞。
               ImagerLoader被Volley封裝        
               高效:
                       OkHttp > Retrofit > Volley
               健壯性:
                       Retrofit > Volley > OkHttp
               易用性:
                       Volley > OkHttp > Retrofit 
     
     7. 圖片三級緩存機制              
            網(wǎng)絡緩存
        public void getBitMapFormNet(ImageView iv, String url) {
    
               BitmapTask bitmap = new BitmapTask();
               bitmap.execute(iv, url);
        }
    
      ** AsyncTask<Params, Progress, Result> **
      class BitmapTask extends AsyncTask<Object, Integer, Bitmap> {
    
      private ImageView imageView;
    
      // 主線程, 預處理
      @Override
      protected void onPreExecute() {
          super.onPreExecute();
      }
    
      // 子線程運行
      @Override
      protected Bitmap doInBackground(Object... params) {
    
          imageView = (ImageView) params[0];
          mUrl = (String) params[1];
          // 設(shè)置標識
          imageView.setTag(mUrl);
          return download(imageView, mUrl);
      }
    
      // 主線程運行
      @Override
      protected void onPostExecute(Bitmap result) {
          super.onPostExecute(result);
    
          if (result != null) {
    
              String url = (String) imageView.getTag();
              if (mUrl.equals(url)) {
                  imageView.setImageBitmap(result);
                  System.out.println("從網(wǎng)絡中下載圖片成功!");
              }
          }
      }
    
      // 主線程運行, 進度不斷更新方法
      @Override
      protected void onProgressUpdate(Integer... values) {
      }
    }
    8. 通過BitmapFactory解碼(獲取)Bitmap的幾種方式
          **decodeFile()**    //從SD卡文件讀取
          **decodeResource()**//從資源文件res讀取
          **decodeStream()**  //從輸入流讀取
          **decodeByteArray()** //從字節(jié)數(shù)組讀取
    
  • 資訊
    list_item下的 一個圖片 下面4個小圖片

  • ListView包含不同Item的布局
    1. 重寫 getViewTypeCount() – 該方法返回多少個不同的布局
    2. 重寫 getItemViewType(int) – 根據(jù)position返回相應的Item
    3. 根據(jù)view item的類型欠肾,在getView中創(chuàng)建正確的convertView

  • 城市
    和資訊的布局一模一樣

  • 設(shè)置(了解)
    builder.setTitle("字體設(shè)置");
    String[] items = new String[] { "超大號字體", "大號字體", "正常字體", "小號字體",
    "超小號字體" };
    builder.setSingleChoiceItems(items, mSelectItem,
    new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    mCurrentItem = which;
    }
    });
    builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {

          @Override
          public void onClick(DialogInterface dialog, int which) {
    
              WebSettings settings = mWebView.getSettings();
              switch (mCurrentItem) {
              case 0:
    
                  settings.setTextSize(TextSize.LARGEST);
                  break;
              case 1:
    
                  settings.setTextSize(TextSize.LARGER);
                  break;
              case 2:
    
                  settings.setTextSize(TextSize.NORMAL);
                  break;
              case 3:
    
                  settings.setTextSize(TextSize.SMALLER);
                  break;
              case 4:
    
                  settings.setTextSize(TextSize.SMALLEST);
                  break;
    
              default:
                  break;
              }
    
              // 將最終選擇的狀態(tài)賦值給初始化狀態(tài)
              mSelectItem = mCurrentItem;
          }
      });
    
  • 獲取緩存,清理緩存
    PackageManager pm = getPackageManager();
    //pm.getPackageSizeInfo("com.example.writecache", mStatsObserver);
    /**
    * 10-22 05:24:52.906: I/System.out(15794): cachesize:4.00KB codesize:0.96MB datasize:0.00B
    */
    //反射獲取緩存
    try {
    Class<?> loadClass = MainActivity.class.getClassLoader().loadClass("android.content.pm.PackageManager");
    Method method = loadClass.getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);
    //receiver : 類的實例,隱藏參數(shù),方法不是靜態(tài)的必須指定
    method.invoke(pm, "com.example.writecache",mStatsObserver);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

       IPackageStatsObserver.Stub mStatsObserver = new IPackageStatsObserver.Stub() {
      public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
          long cachesize = stats.cacheSize;//緩存大小
          long codesize = stats.codeSize;//應用程序的大小
          long datasize = stats.dataSize;//數(shù)據(jù)大小
          
          String cache = Formatter.formatFileSize(getApplicationContext(), cachesize);
          String code = Formatter.formatFileSize(getApplicationContext(), codesize);
          String data = Formatter.formatFileSize(getApplicationContext(), datasize);
          
          System.out.println("cachesize:"+cache +" codesize:"+code+" datasize:"+data);
       }
     };
        **權(quán)限 Android_UserPerssion_getPakeragerSize;**
    
  • 獲取清理緩存(小妖)
    1 遍歷getCacheDir下的所有文件,計算每個文件的大小即可
    2 清除也是一樣,遍歷所有文件的大小,刪除即可
    3 file.length() 返回的是文件的大小(單位b)

  • 新聞搜索(時間過長)
    1 由于數(shù)據(jù)過大关炼,應該是服務器那邊的, 關(guān)鍵字查詢
    2 服務器器會返回相關(guān)數(shù)據(jù)給我
    3 里面的一些數(shù)據(jù), 基本是都是html的形式, 已經(jīng)排好.

  • 評論
    1.沒什么作用
    2.發(fā)現(xiàn)起始就是頭布局壓縮啦涩笤! 關(guān)于他的topBar

  • Android 實現(xiàn)變色狀態(tài)欄

      // 保留狀態(tài)的位置
      <item name="android:fitsSystemWindows">true</item>
      Google 了之后在 Github 找到了一個開源項目 【SystemBarTint】 
    

Github開源項目 SystemBarTint
自己封裝后
// 初始化窗體
@SuppressLint("ResourceAsColor")
@TargetApi(19)
private void initWindow() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

        mTintManager = new SystemBarTintManager(this);     // 色彩管理者
        mColorPicker = new ColorPicker(this);             // 獲取顏色采集器
        // mTintManager.setStatusBarTintColor(R.color.main_color);
        mTintManager.setStatusBarTintEnabled(true);     // 設(shè)置狀態(tài)欄可用
        int color = Color.argb(100, 255, 0, 0);         
        mTintManager.setTintColor(color);                 // 設(shè)置色彩顏色
    }
   }
  • 關(guān)于(結(jié)束)

  • 效仿QQ昆淡、微信锰瘸、新浪的圓形頭像

    1. 將原圖居中裁剪成正方形
  1. 根據(jù)指定的寬度對正方形進行縮放
  2. 裁剪成圓形

酒心網(wǎng)###

  • 定位

定位方式#

     gps一種定位方式
     1.wifi定位,IP地址,根據(jù)你的IP地址獲取你的地理位置,精確度不是特別高了
     2.基站定位,基站就是為電話服務,信號的強弱決定了你離基站的距離,精確度比較高,幾十米--幾公里,精確度取決于基站的個數(shù)

     wifi定位和基站定位局限性:不能定位海拔
     3.gps定位,gps定位衛(wèi)星進行定位,使用最少衛(wèi)星實現(xiàn)全球定位,去和       
       gps定位衛(wèi)星進行通訊來獲取定位坐標,通過光波進行通訊,必須得到     
       空曠地方才能進行定位,連接至少需要一分鐘,耗電,精確度特別高,不
       需要聯(lián)網(wǎng),聯(lián)網(wǎng):agps技術(shù),通過聯(lián)網(wǎng)來修正獲取的坐標,特別準確的

       百度定位sdk   gps
       高德  sdk

定位的具體代碼

android.permission.ACCESS_MOCK_LOCATION : 模擬位置的權(quán)限,模擬器中必須加的,真機可加可不加
android.permission.ACCESS_FINE_LOCATION : 精確位置的權(quán)限,真機必須添加
android.permission.ACCESS_COARSE_LOCATION : 大概位置的權(quán)限,真機必須添加

passive : 被動,基站定位
gps : gps定位

定位的步驟
1.獲取位置的管理者
    //1.獲取位置的管理者
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
2.獲取定位方式
    //2.獲取定位方式
    //2.1獲取所有的定位方式
    //enabledOnly : true : 返回所有可用的定位方式
    List<String> providers = locationManager.getProviders(true);
    for (String string : providers) {
        System.out.println(string);
    }
    //2.2獲取最佳的定位方式
    Criteria criteria = new Criteria();
    criteria.setAltitudeRequired(true);//設(shè)置是否可以定位海拔,true:可以定位海拔,一定返回gps定位
    //criteria : 設(shè)置定位的屬性,決定使用什么定位方式的
    //enabledOnly : true : 定位可用的就返回
    String bestProvider = locationManager.getBestProvider(criteria, true);
    System.out.println("最佳的定位方式:"+bestProvider);
3.定位操作
    a.定位
        //provider : 定位方式
        //minTime : 定位的最小時間間隔
        //minDistance : 定位的最小距離間隔
        //listener : LocationListener
        locationManager.requestLocationUpdates(bestProvider, 0, 0, myLocationListener);
    b.LocationListener
        private class MyLocationListener implements LocationListener{
            //當定位位置改變的時候調(diào)用
            //location : 當前的位置
            @Override
            public void onLocationChanged(Location location) {
                double latitude = location.getLatitude();//獲取緯度,平行
                double longitude = location.getLongitude();//獲取經(jīng)度
                textview.setText("longitude:"+longitude+"   latitude:"+latitude);
            }
            //當定位狀態(tài)改變的時候調(diào)用
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
                
            }
            //當定位可用的時候調(diào)用
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
                
            }
            //當定位不可用的時候調(diào)用
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
                
            }
            
        }
4.關(guān)閉gps定位
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //關(guān)閉gps定位,高版本中已經(jīng)不能這么做了,高版本中規(guī)定關(guān)閉和開啟gps必須交由用戶自己去實現(xiàn)
        locationManager.removeUpdates(myLocationListener);
    }

 GPS定位城市需要做兩個步驟:
 1瘪撇、取得用戶當前位置的經(jīng)度获茬,緯度。 
 2倔既、根據(jù)經(jīng)緯度轉(zhuǎn)換成城市名稱恕曲。
    經(jīng)緯度轉(zhuǎn)換成城市名稱,只能使用地圖服務了渤涌。自己做不來佩谣。
    地圖服務API有兩個,一個是百度地圖实蓬,一個是谷歌地圖茸俭。百度地圖API    
    調(diào)用需要注冊百度帳號,并申請APP_KEY安皱,谷歌地圖API直接調(diào)用即可调鬓。

    百度地圖API調(diào)用地址:
   http://api.map.baidu.com/geocoder?output=json&location=緯度,經(jīng)度&key=APP_KEY

QuickSideBar

幫助快速查閱對應分組的側(cè)邊欄,可以配合任意列表酌伊,demo中給出配合RecyclerView(浮動分組使用stickyheadersrecyclerview)腾窝。

項目地址:https://github.com/saiwu-bigkoo/Android-QuickSideBar

  • 支付方式

  • 窗體小控件
    View contentView = View.inflate(getApplicationContext(), R.layout.popu_window, null);
    //contentView : 顯示view對象
    //width,height : view寬高
    popupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    //4.獲取條目的位置,讓氣泡顯示在相應的條目
    int[] location = new int[2];//保存x和y坐標的數(shù)組
    view.getLocationInWindow(location);//獲取條目x和y的坐標,同時保存到int[]
    //獲取x和y的坐標
    int x = location[0];
    int y = location[1];
    //parent : 要掛載在那個控件上
    //gravity,x,y : 控制popuwindow顯示的位置
    popupWindow.showAtLocation(parent, Gravity.LEFT | Gravity.TOP, x+50, y);

      隱藏氣泡
      /**
       * 隱藏氣泡
       */
      private void hidePopuwindow() {
          if (popupWindow != null) {
              popupWindow.dismiss();//隱藏氣泡
              popupWindow = null;
          }
      }
    
              //6.設(shè)置動畫
              //縮放動畫
              //前四個 : 控制控件由沒有變到有   動畫 0:沒有    1:整個控件
              //后四個:控制控件是按照自身還是父控件進行變化
              //RELATIVE_TO_SELF : 以自身變化
              //RELATIVE_TO_PARENT : 以父控件變化
              ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0.5f);
              scaleAnimation.setDuration(500);
              
              //漸變動畫
              AlphaAnimation alphaAnimation = new AlphaAnimation(0.4f, 1.0f);//由半透明變成不透明
              alphaAnimation.setDuration(500);
              
              //組合動畫
              //shareInterpolator : 是否使用相同的動畫插補器  true:共享    false:各自使用各自的
              AnimationSet animationSet = new AnimationSet(true);
              //添加動畫
              animationSet.addAnimation(scaleAnimation);
              animationSet.addAnimation(alphaAnimation);
              //執(zhí)行動畫
              contentView.startAnimation(animationSet);
      給popuwindow設(shè)置背景
      popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    

側(cè)邊欄抽屜效果

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市居砖,隨后出現(xiàn)的幾起案子虹脯,更是在濱河造成了極大的恐慌,老刑警劉巖奏候,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循集,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔗草,警方通過查閱死者的電腦和手機咒彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咒精,“玉大人蔼紧,你說我怎么就攤上這事『萸幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵彬犯,是天一觀的道長向楼。 經(jīng)常有香客問我查吊,道長,這世上最難降的妖魔是什么湖蜕? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任逻卖,我火速辦了婚禮,結(jié)果婚禮上昭抒,老公的妹妹穿的比我還像新娘评也。我一直安慰自己,他們只是感情好灭返,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布盗迟。 她就那樣靜靜地躺著,像睡著了一般熙含。 火紅的嫁衣襯著肌膚如雪罚缕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天怎静,我揣著相機與錄音邮弹,去河邊找鬼。 笑死蚓聘,一個胖子當著我的面吹牛腌乡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夜牡,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼与纽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氯材?” 一聲冷哼從身側(cè)響起渣锦,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氢哮,沒想到半個月后袋毙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡冗尤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年听盖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裂七。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡皆看,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出背零,到底是詐尸還是另有隱情腰吟,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站毛雇,受9級特大地震影響嫉称,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灵疮,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一织阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧震捣,春花似錦荔棉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诉植,卻和暖如春祥国,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晾腔。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工舌稀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灼擂。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓壁查,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剔应。 傳聞我的和親對象是個殘疾皇子睡腿,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,780評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法峻贮,內(nèi)部類的語法席怪,繼承相關(guān)的語法,異常的語法纤控,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 1挂捻、activity怎么與service通信? 首先注意Service有兩種類型: 本地服務(Local Serv...
    shone閱讀 440評論 0 2
  • 今天船万,去一家公司面試android刻撒,問的全是java基礎(chǔ),自己回答的比較勉強耿导,結(jié)果可想而知声怔,打臉了****** 1...
    shone閱讀 300評論 0 2
  • 我很健康 我很快樂 我是豐盛富足的 我是圓滿喜悅的 我是金錢磁鐵 我是金錢管道 我是億萬富翁 金錢總是源源不斷地來...
    靈音九鳳閱讀 926評論 0 0