側滑(點選條目進行跳轉+點選更換頭像(二次取樣))+ViewPager
阿新 • • 發佈:2018-11-30
1.Layout佈局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/drawer" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" ></android.support.v4.view.ViewPager> <RadioGroup android:id="@+id/group" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <RadioButton android:id="@+id/radio1" android:gravity="center" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="首頁" /> <RadioButton android:id="@+id/radio2" android:gravity="center" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="視訊" /> <RadioButton android:id="@+id/radio3" android:gravity="center" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="我的" /> </RadioGroup> </LinearLayout> <LinearLayout android:layout_width="255dp" android:layout_gravity="start" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" app:srcCompat="@mipmap/ic_launcher" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout> </android.support.v4.widget.DrawerLayout>
2.MainActivity
public class MainActivity extends AppCompatActivity { private DrawerLayout drawer; private ListView listView; private ImageView imageView; private ViewPager pager; private RadioGroup group; private Uri uri; private List<Fragment> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取資源ID drawer = findViewById(R.id.drawer); listView = findViewById(R.id.listview); imageView = findViewById(R.id.imageView); pager = findViewById(R.id.pager); group = findViewById(R.id.group); list = new ArrayList<>(); list.add(new Fone()); list.add(new Ftwo()); list.add(new Fthree()); //getpager新增介面卡 pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return list.size(); } @Override public Fragment getItem(int i) { return list.get(i); } }); //ViewPager頁面切換按鈕隨之改變 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { switch (i){ case 0: group.check(R.id.radio1); break; case 1: group.check(R.id.radio2); break; case 2: group.check(R.id.radio3); break; } } @Override public void onPageScrollStateChanged(int i) { } }); //點選按鈕頁面隨之切換 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.radio1: pager.setCurrentItem(0); break; case R.id.radio2: pager.setCurrentItem(1); break; case R.id.radio3: pager.setCurrentItem(2); break; } } }); //側滑 List<String> list = new ArrayList<>(); list.add("條目一"); list.add("條目二"); list.add("條目三"); listView.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,list)); //點選條目切換到對應的pager頁 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { pager.setCurrentItem(position); drawer.closeDrawers(); } }); //點選頭像圖片進行二次取樣 imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent,1); } }); } //得到檔案路徑 private String getUrl(Uri uri){ String[] pro = {MediaStore.Images.Media.DATA}; CursorLoader loader = new CursorLoader(this,uri,pro,null,null,null); Cursor cursor = loader.loadInBackground(); int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(index); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if(requestCode == 1 && resultCode == RESULT_OK){ uri = data.getData(); String url = getUrl(uri); NetUtil.twoImage(url, new NetUtil.CallBackImage() { @Override public void imageOk(Bitmap bitmap) { imageView.setImageBitmap(bitmap); } }); drawer.closeDrawers(); return; } } }
3.NetUtil工具類
public class NetUtil { //二次取樣 public static interface CallBackImage{ void imageOk(Bitmap bitmap); } public static Bitmap twoImage(String filePath){ BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath,options); //根據圖片原始寬高,計算取樣 options.inSampleSize = Math.max(options.outHeight/100,options.outWidth/100); //設定真正載入圖片 options.inJustDecodeBounds = false; //第二次載入圖片 Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); return bitmap; } public static Bitmap twoImage(String filePath, final CallBackImage callBackImage){ new AsyncTask<String, Void, Bitmap>() { @Override protected Bitmap doInBackground(String... strings) { return twoImage(strings[0]); } @Override protected void onPostExecute(Bitmap bitmap) { callBackImage.imageOk(bitmap); } }.execute(filePath); return null; } //解析Json public static void getJson(String path, final Class clazz, final CallBack callBack){ new AsyncTask<String, Void, Object>() { @Override protected Object doInBackground(String... strings) { return getJson(strings[0],clazz); } @Override protected void onPostExecute(Object o) { callBack.success(o); } }.execute(path); } public static interface CallBack<T>{ void success(T o); } public static <T> T getJson(String path,Class clazz) { String json = getJson(path); Gson gson = new Gson(); T o = (T) gson.fromJson(json, clazz); return o; } public static String getJson(String path){ String json = ""; try { URL url = new URL(path); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); int responseCode = urlConnection.getResponseCode(); if(responseCode == 200){ json = stream2string(urlConnection.getInputStream()); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return json; } //流轉換 public static String stream2string(InputStream is) throws IOException { StringBuilder builder = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); for (String t = br.readLine();t != null;t = br.readLine()){ builder.append(t); } return builder.toString(); } }
4.加許可權
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>