Explorar el Código

集成gvr-sdk

hsiao hace 7 años
padre
commit
64366a1758
Se han modificado 49 ficheros con 655 adiciones y 97 borrados
  1. 6
    0
      .idea/inspectionProfiles/Project_Default.xml
  2. 8
    7
      lesson03/build.gradle
  3. 1
    0
      lesson03/proguard-rules.pro
  4. 6
    2
      lesson03/src/main/AndroidManifest.xml
  5. 110
    0
      lesson03/src/main/java/io/hsiao/lesson03/AlbumGridAdapter.java
  6. 41
    17
      lesson03/src/main/java/io/hsiao/lesson03/MainActivity.java
  7. 21
    1
      lesson03/src/main/java/io/hsiao/lesson03/MainListAdapter.java
  8. 36
    13
      lesson03/src/main/java/io/hsiao/lesson03/PanoActivity.java
  9. 19
    0
      lesson03/src/main/java/io/hsiao/lesson03/PanoVideoActivity.java
  10. 134
    0
      lesson03/src/main/java/io/hsiao/lesson03/PublishActivity.java
  11. 11
    3
      lesson03/src/main/java/io/hsiao/lesson03/data/AsyncListLoader.java
  12. 3
    2
      lesson03/src/main/java/io/hsiao/lesson03/data/HttpAPI.java
  13. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_add.png
  14. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_collections.png
  15. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_favor_border.png
  16. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_favors.png
  17. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_send.png
  18. BIN
      lesson03/src/main/res/drawable-hdpi/ic_action_user.png
  19. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_add.png
  20. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_collections.png
  21. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_favor_border.png
  22. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_favors.png
  23. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_send.png
  24. BIN
      lesson03/src/main/res/drawable-mdpi/ic_action_user.png
  25. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_add.png
  26. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_collections.png
  27. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_favor_border.png
  28. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_favors.png
  29. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_send.png
  30. BIN
      lesson03/src/main/res/drawable-xhdpi/ic_action_user.png
  31. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_add.png
  32. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_collections.png
  33. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_favor_border.png
  34. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_favors.png
  35. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_send.png
  36. BIN
      lesson03/src/main/res/drawable-xxhdpi/ic_action_user.png
  37. 13
    0
      lesson03/src/main/res/layout/activity_gvr_video.xml
  38. 16
    0
      lesson03/src/main/res/layout/activity_gvr_view.xml
  39. 23
    11
      lesson03/src/main/res/layout/activity_main.xml
  40. 97
    0
      lesson03/src/main/res/layout/activity_publish.xml
  41. 13
    8
      lesson03/src/main/res/layout/activity_publish_grid.xml
  42. 37
    28
      lesson03/src/main/res/layout/main_listview_item.xml
  43. 26
    0
      lesson03/src/main/res/menu/menu_main.xml
  44. 10
    0
      lesson03/src/main/res/menu/menu_publish.xml
  45. 11
    0
      lesson03/src/main/res/values-v21/styles.xml
  46. 6
    3
      lesson03/src/main/res/values/colors.xml
  47. 4
    0
      lesson03/src/main/res/values/integers.xml
  48. 2
    1
      lesson03/src/main/res/values/strings.xml
  49. 1
    1
      lesson03/src/main/res/values/styles.xml

+ 6
- 0
.idea/inspectionProfiles/Project_Default.xml Ver fichero

@@ -0,0 +1,6 @@
1
+<component name="InspectionProjectProfileManager">
2
+  <profile version="1.0">
3
+    <option name="myName" value="Project Default" />
4
+    <inspection_tool class="SingleStatementInBlock" enabled="false" level="INFORMATION" enabled_by_default="false" />
5
+  </profile>
6
+</component>

+ 8
- 7
lesson03/build.gradle Ver fichero

@@ -1,13 +1,10 @@
1 1
 apply plugin: 'com.android.application'
2 2
 android {
3 3
     compileSdkVersion 25
4
-
5
-
6
-
7 4
     defaultConfig {
8 5
         applicationId "io.hsiao.lesson03"
9
-        minSdkVersion 19
10
-        targetSdkVersion 26
6
+        minSdkVersion 23
7
+        targetSdkVersion 25
11 8
         versionCode 1
12 9
         versionName "1.0"
13 10
 
@@ -26,9 +23,13 @@ android {
26 23
 
27 24
 dependencies {
28 25
     implementation fileTree(dir: 'libs', include: ['*.jar'])
29
-    compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.9.1'
30
-    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.45'
26
+    compile 'com.squareup.okhttp3:okhttp:3.9.1'
27
+    compile 'com.alibaba:fastjson:1.2.45'
31 28
     compile 'com.squareup.picasso:picasso:2.5.2'
29
+    compile 'com.google.vr:sdk-base:1.80.0'
30
+    compile 'com.google.vr:sdk-panowidget:1.70.0'
31
+    compile 'com.google.vr:sdk-videowidget:1.40.0'
32
+    compile 'com.zhihu.android:matisse:0.4.3'
32 33
 
33 34
     implementation 'com.android.support:appcompat-v7:25.1.0'
34 35
     implementation 'com.android.support.constraint:constraint-layout:1.0.2'

+ 1
- 0
lesson03/proguard-rules.pro Ver fichero

@@ -19,3 +19,4 @@
19 19
 # If you keep the line number information, uncomment this to
20 20
 # hide the original source file name.
21 21
 #-renamesourcefileattribute SourceFile
22
+-dontwarn com.bumptech.glide.**

+ 6
- 2
lesson03/src/main/AndroidManifest.xml Ver fichero

@@ -4,6 +4,7 @@
4 4
 
5 5
     <uses-permission android:name="android.permission.INTERNET" />
6 6
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
7
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
7 8
 
8 9
     <application
9 10
         android:allowBackup="true"
@@ -15,11 +16,14 @@
15 16
         <activity android:name=".MainActivity">
16 17
             <intent-filter>
17 18
                 <action android:name="android.intent.action.MAIN" />
18
-
19 19
                 <category android:name="android.intent.category.LAUNCHER" />
20 20
             </intent-filter>
21 21
         </activity>
22
-        <activity android:name=".PanoActivity"></activity>
22
+        <activity
23
+            android:name=".PanoActivity"
24
+            android:theme="@style/Theme.AppCompat.NoActionBar" />
25
+        <activity android:name=".PanoVideoActivity" />
26
+        <activity android:name=".PublishActivity"></activity>
23 27
     </application>
24 28
 
25 29
 </manifest>

+ 110
- 0
lesson03/src/main/java/io/hsiao/lesson03/AlbumGridAdapter.java Ver fichero

@@ -0,0 +1,110 @@
1
+package io.hsiao.lesson03;
2
+
3
+import android.content.Context;
4
+import android.net.Uri;
5
+import android.util.Log;
6
+import android.view.LayoutInflater;
7
+import android.view.View;
8
+import android.view.ViewGroup;
9
+import android.widget.BaseAdapter;
10
+import android.widget.ImageButton;
11
+import android.widget.ImageView;
12
+import android.widget.TextView;
13
+
14
+import com.alibaba.fastjson.JSONArray;
15
+import com.alibaba.fastjson.JSONObject;
16
+import com.squareup.picasso.Picasso;
17
+
18
+import java.text.SimpleDateFormat;
19
+import java.util.ArrayList;
20
+import java.util.Date;
21
+import java.util.List;
22
+
23
+
24
+/**
25
+ * Created by hsiao on 2018/2/4.
26
+ */
27
+
28
+public class AlbumGridAdapter extends BaseAdapter {
29
+    private  final String TAG="youmap";
30
+    private List<Uri> array;
31
+    private final Context ctx;
32
+
33
+    private SimpleDateFormat sdf;
34
+    private int imgHeight;
35
+
36
+    public AlbumGridAdapter(Context ctx) {
37
+        this.ctx = ctx;
38
+        this.array = new ArrayList<>();
39
+        this.sdf = new SimpleDateFormat("yyyy-MM-dd");
40
+        this.imgHeight = MainActivity.screenOutSize.x/3;
41
+    }
42
+
43
+    public void addAll(List<Uri> arr) {
44
+        this.array.addAll(arr);
45
+    }
46
+
47
+    public  void add(Uri uri){
48
+        this.array.add(uri);
49
+    }
50
+    public void remove(Uri uri){
51
+        for(int i=0;i<array.size();i++){
52
+            if(uri.equals(array.get(i)))
53
+                array.remove(uri);
54
+        }
55
+    }
56
+    @Override
57
+    public int getCount() {
58
+        return array.size();
59
+    }
60
+
61
+    @Override
62
+    public Object getItem(int position) {
63
+        return array.get(position);
64
+    }
65
+
66
+    @Override
67
+    public long getItemId(int position) {
68
+        return position;
69
+    }
70
+
71
+    @Override
72
+    public View getView(int position, View convertView, ViewGroup parent) {
73
+        final ViewHolder holder;
74
+        if (convertView == null) {
75
+            holder = new ViewHolder();
76
+            convertView = LayoutInflater.from(ctx).inflate(R.layout.activity_publish_grid, null);
77
+            holder.closeBtn = (ImageButton) convertView.findViewById(R.id.publish_grid_close);
78
+            holder.thumbnail = (ImageView) convertView.findViewById(R.id.publish_grid_img);
79
+            ViewGroup.LayoutParams layoutParams = holder.thumbnail.getLayoutParams();
80
+            layoutParams.height = imgHeight;
81
+            layoutParams.width = imgHeight;
82
+            holder.thumbnail.setLayoutParams(layoutParams);
83
+            convertView.setTag(holder);
84
+        } else {
85
+            holder = (ViewHolder) convertView.getTag();
86
+        }
87
+        Uri uri = array.get(position);
88
+        holder.uri = uri;
89
+        Picasso.with(ctx)
90
+                .load(uri)
91
+                .fit()
92
+                .into(holder.thumbnail);
93
+
94
+        holder.closeBtn.setOnClickListener(new View.OnClickListener() {
95
+            @Override
96
+            public void onClick(View v) {
97
+                Log.i(TAG,holder.uri.getPath());
98
+                remove(holder.uri);
99
+                notifyDataSetChanged();
100
+            }
101
+        });
102
+        return convertView;
103
+    }
104
+
105
+    public class ViewHolder {
106
+        ImageView thumbnail;
107
+        ImageButton closeBtn;
108
+        Uri uri;
109
+    }
110
+}

+ 41
- 17
lesson03/src/main/java/io/hsiao/lesson03/MainActivity.java Ver fichero

@@ -1,44 +1,43 @@
1 1
 package io.hsiao.lesson03;
2 2
 
3 3
 import android.content.Intent;
4
+import android.graphics.Point;
4 5
 import android.os.AsyncTask;
5 6
 import android.os.Bundle;
6 7
 import android.support.v7.app.AppCompatActivity;
8
+import android.support.v7.widget.Toolbar;
7 9
 import android.util.Log;
10
+import android.view.Menu;
11
+import android.view.MenuInflater;
12
+import android.view.MenuItem;
8 13
 import android.view.View;
9 14
 import android.widget.AbsListView;
10 15
 import android.widget.AdapterView;
16
+import android.widget.GridView;
11 17
 import android.widget.ListView;
12 18
 import android.widget.ProgressBar;
13
-import android.widget.SimpleAdapter;
14
-
15
-import com.alibaba.fastjson.JSONArray;
16
-
17
-import java.util.ArrayList;
18
-import java.util.HashMap;
19
-import java.util.List;
20
-import java.util.Map;
21 19
 
22 20
 import io.hsiao.lesson03.data.AsyncListLoader;
23
-import io.hsiao.lesson03.data.HttpAPI;
24 21
 
25 22
 public class MainActivity extends AppCompatActivity {
23
+    public static Point screenOutSize = new Point();
26 24
     private final String TAG = "lesson03";
27
-    private ListView listView;
25
+    private GridView listView;
28 26
     private ProgressBar progressBar;
29 27
     private MainListAdapter adapter;
30 28
 
31 29
     private int dataOffset = 0;
32
-    private int pageSize = 10;
33
-    private AsyncListLoader loader;
30
+    private int pageSize = 15;
34 31
 
35 32
     @Override
36 33
     protected void onCreate(Bundle savedInstanceState) {
37 34
         super.onCreate(savedInstanceState);
38
-
39 35
         setContentView(R.layout.activity_main);
36
+        setSupportActionBar( (Toolbar) this.findViewById(R.id.main_toolbar));
37
+        getWindowManager().getDefaultDisplay().getSize(screenOutSize);
38
+
40 39
         this.progressBar = (ProgressBar) this.findViewById(R.id.progressBar);
41
-        this.listView = (ListView) this.findViewById(R.id.main_listview);
40
+        this.listView = (GridView) this.findViewById(R.id.main_gridview);
42 41
         this.adapter = new MainListAdapter(this);
43 42
         listView.setAdapter(adapter);
44 43
 
@@ -74,10 +73,35 @@ public class MainActivity extends AppCompatActivity {
74 73
     }
75 74
 
76 75
     private void getData() {
77
-        this.loader = new AsyncListLoader(adapter, progressBar);
78
-        if (progressBar.getVisibility() == View.GONE && this.loader.getStatus() == AsyncTask.Status.PENDING) {
76
+        AsyncListLoader loader = new AsyncListLoader(adapter, progressBar);
77
+        if (progressBar.getVisibility() == View.GONE ) {
79 78
             progressBar.setVisibility(View.VISIBLE);
80
-            this.loader.execute("/feeds/hot?limit=" + pageSize + "&offset=" + dataOffset);
79
+            loader.execute("/feeds/hot?limit=" + pageSize + "&offset=" + dataOffset);
80
+        }
81
+    }
82
+
83
+    @Override
84
+    public boolean onCreateOptionsMenu(Menu menu) {
85
+        getMenuInflater().inflate(R.menu.menu_main,menu);
86
+        return true;
87
+    }
88
+
89
+    @Override
90
+    public boolean onOptionsItemSelected(MenuItem item) {
91
+        switch (item.getItemId()){
92
+            case R.id.menu_publish:
93
+                Intent intent = new Intent(this, PublishActivity.class);
94
+                startActivity(intent);
95
+                break;
96
+            case R.id.menu_settings:
97
+                break;
98
+            case R.id.menu_topic:
99
+                break;
100
+            case R.id.menu_usercenter:
101
+                break;
102
+            case R.id.menu_welcome:
103
+                break;
81 104
         }
105
+        return true;
82 106
     }
83 107
 }

+ 21
- 1
lesson03/src/main/java/io/hsiao/lesson03/MainListAdapter.java Ver fichero

@@ -1,6 +1,7 @@
1 1
 package io.hsiao.lesson03;
2 2
 
3 3
 import android.content.Context;
4
+import android.util.Log;
4 5
 import android.view.LayoutInflater;
5 6
 import android.view.View;
6 7
 import android.view.ViewGroup;
@@ -12,6 +13,9 @@ import com.alibaba.fastjson.JSONArray;
12 13
 import com.alibaba.fastjson.JSONObject;
13 14
 import com.squareup.picasso.Picasso;
14 15
 
16
+import java.text.SimpleDateFormat;
17
+import java.util.Date;
18
+
15 19
 
16 20
 /**
17 21
  * Created by hsiao on 2018/2/4.
@@ -22,9 +26,14 @@ public class MainListAdapter extends BaseAdapter {
22 26
     private  boolean dataRunUp;
23 27
     private final Context ctx;
24 28
 
29
+    private SimpleDateFormat sdf;
30
+    private int imgHeight;
31
+
25 32
     public MainListAdapter(Context ctx) {
26 33
         this.ctx = ctx;
27 34
         this.array = new JSONArray();
35
+        this.sdf = new SimpleDateFormat("yyyy-MM-dd");
36
+        this.imgHeight = MainActivity.screenOutSize.x/3;
28 37
     }
29 38
 
30 39
     public void setDataRunUp(boolean dataRunUp) {
@@ -65,6 +74,10 @@ public class MainListAdapter extends BaseAdapter {
65 74
             holder.desc = (TextView) convertView.findViewById(R.id.main_list_desc);
66 75
             holder.likes = (TextView) convertView.findViewById(R.id.main_list_likes);
67 76
             holder.thumbnail = (ImageView) convertView.findViewById(R.id.main_list_thumnail);
77
+            ViewGroup.LayoutParams layoutParams = holder.thumbnail.getLayoutParams();
78
+            layoutParams.height = imgHeight;
79
+            layoutParams.width = imgHeight;
80
+            holder.thumbnail.setLayoutParams(layoutParams);
68 81
             convertView.setTag(holder);
69 82
         } else {
70 83
             holder = (ViewHolder) convertView.getTag();
@@ -73,12 +86,19 @@ public class MainListAdapter extends BaseAdapter {
73 86
         holder.likes.setText(json.getString("likes"));
74 87
         holder.title.setText(json.getString("name"));
75 88
         holder.desc.setText(json.getString("description"));
76
-        holder.date.setText(json.getString("create_time"));
89
+        holder.date.setText(sdf.format(new Date(1000 * json.getLongValue("create_time"))));
77 90
         holder.imgUUID = json.getString("uuid");
78 91
 
79 92
         Picasso.with(ctx)
80 93
                 .load("http://reefun.cn/real360/api/obj/thumbnail/" + json.getString("uuid"))
94
+                .fit()
81 95
                 .into(holder.thumbnail);
96
+        convertView.setOnClickListener(new View.OnClickListener() {
97
+            @Override
98
+            public void onClick(View v) {
99
+
100
+            }
101
+        });
82 102
 
83 103
         return convertView;
84 104
     }

+ 36
- 13
lesson03/src/main/java/io/hsiao/lesson03/PanoActivity.java Ver fichero

@@ -1,33 +1,56 @@
1 1
 package io.hsiao.lesson03;
2 2
 
3 3
 import android.content.Intent;
4
-import android.media.Image;
5
-import android.support.v7.app.AppCompatActivity;
4
+import android.graphics.Bitmap;
5
+import android.graphics.BitmapFactory;
6
+import android.net.Uri;
6 7
 import android.os.Bundle;
8
+import android.support.v7.app.AppCompatActivity;
9
+import android.view.Window;
10
+import android.view.WindowManager;
7 11
 import android.widget.ImageView;
8 12
 
13
+import com.google.vr.sdk.widgets.pano.VrPanoramaView;
14
+import com.squareup.picasso.Downloader;
9 15
 import com.squareup.picasso.Picasso;
16
+import com.squareup.picasso.UrlConnectionDownloader;
17
+
18
+import java.io.IOException;
10 19
 
11 20
 public class PanoActivity extends AppCompatActivity {
12 21
 
13 22
     private ImageView img;
23
+    private String imgUrl;
24
+
25
+    private VrPanoramaView vrView;
14 26
 
15 27
     @Override
16 28
     protected void onCreate(Bundle savedInstanceState) {
17 29
         super.onCreate(savedInstanceState);
18
-        setContentView(R.layout.activity_pano);
30
+        requestWindowFeature(Window.FEATURE_NO_TITLE);
31
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
32
+        //setContentView(R.layout.activity_pano);
33
+        setContentView(R.layout.activity_gvr_view);
19 34
 
20 35
         Intent intent = this.getIntent();
21
-        String imgUrl = intent.getStringExtra("img_url");
22
-
23
-        this.img = (ImageView) this.findViewById(R.id.pano_imgview);
36
+        this.imgUrl = intent.getStringExtra("img_url");
37
+        this.vrView = (VrPanoramaView) this.findViewById(R.id.gvr_pano_view);
38
+        loadGvrPano();
24 39
 
25
-        Picasso p = Picasso.with(this);
26
-        p.setIndicatorsEnabled(true);
27
-
28
-        p.load("http://reefun.cn/real360/api/obj/fetch/"+imgUrl)
29
-                .rotate(45)
30
-
31
-                .into(this.img);
32 40
     }
41
+    private void loadGvrPano(){
42
+        UrlConnectionDownloader  dl = new UrlConnectionDownloader(this);
43
+        Uri uri = Uri.parse("http://reefun.cn/real360/api/obj/fetch/" + imgUrl);
44
+        try {
45
+            Downloader.Response resp = dl.load(uri, -1);
46
+            Bitmap bmp = BitmapFactory.decodeStream(resp.getInputStream());
47
+
48
+            VrPanoramaView.Options opt = new VrPanoramaView.Options();
49
+            opt.inputType = VrPanoramaView.Options.TYPE_MONO;
50
+            this.vrView.loadImageFromBitmap(bmp,opt);
51
+        } catch (IOException e) {
52
+            e.printStackTrace();
53
+        }
54
+    }
55
+
33 56
 }

+ 19
- 0
lesson03/src/main/java/io/hsiao/lesson03/PanoVideoActivity.java Ver fichero

@@ -0,0 +1,19 @@
1
+package io.hsiao.lesson03;
2
+
3
+import android.support.v7.app.AppCompatActivity;
4
+import android.os.Bundle;
5
+
6
+import com.google.vr.sdk.widgets.video.VrVideoView;
7
+
8
+public class PanoVideoActivity extends AppCompatActivity {
9
+
10
+    private VrVideoView videoView;
11
+
12
+    @Override
13
+    protected void onCreate(Bundle savedInstanceState) {
14
+        super.onCreate(savedInstanceState);
15
+        setContentView(R.layout.activity_gvr_video);
16
+
17
+
18
+    }
19
+}

+ 134
- 0
lesson03/src/main/java/io/hsiao/lesson03/PublishActivity.java Ver fichero

@@ -0,0 +1,134 @@
1
+package io.hsiao.lesson03;
2
+
3
+import android.Manifest;
4
+import android.content.Intent;
5
+import android.content.pm.PackageManager;
6
+import android.net.Uri;
7
+import android.support.annotation.NonNull;
8
+import android.support.v7.app.ActionBar;
9
+import android.support.v7.app.AppCompatActivity;
10
+import android.os.Bundle;
11
+import android.support.v7.widget.Toolbar;
12
+import android.util.Log;
13
+import android.view.Menu;
14
+import android.view.MenuInflater;
15
+import android.view.MenuItem;
16
+import android.view.View;
17
+import android.widget.GridView;
18
+import android.widget.ImageButton;
19
+import android.widget.ProgressBar;
20
+
21
+import com.zhihu.matisse.Matisse;
22
+import com.zhihu.matisse.MimeType;
23
+import com.zhihu.matisse.engine.impl.PicassoEngine;
24
+
25
+import java.util.List;
26
+
27
+import io.hsiao.lesson03.data.AsyncListLoader;
28
+
29
+import static io.hsiao.lesson03.R.id.publish_toolbar;
30
+
31
+public class PublishActivity extends AppCompatActivity {
32
+    private String TAG="youmap_publish";
33
+    private ImageButton chooseBtn;
34
+    private GridView gridView;
35
+    private int REQUEST_CODE_CHOOSE = 999;
36
+    private int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 10000;
37
+    private AlbumGridAdapter gridAdapter;
38
+
39
+    @Override
40
+    protected void onCreate(Bundle savedInstanceState) {
41
+        super.onCreate(savedInstanceState);
42
+        setContentView(R.layout.activity_publish);
43
+        setSupportActionBar((Toolbar) findViewById(publish_toolbar));
44
+        ActionBar bar = getSupportActionBar();
45
+        bar.setDisplayHomeAsUpEnabled(true);
46
+
47
+        this.gridView = (GridView) findViewById(R.id.publish_gridview);
48
+        this.gridAdapter = new AlbumGridAdapter(this);
49
+        this.gridView.setAdapter(gridAdapter);
50
+
51
+        this.chooseBtn = (ImageButton) findViewById(R.id.publish_choose_btn);
52
+        this.chooseBtn.setOnClickListener(new View.OnClickListener() {
53
+            @Override
54
+            public void onClick(View v) {
55
+                if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
56
+                        != PackageManager.PERMISSION_GRANTED) {
57
+
58
+                    // Should we show an explanation?
59
+                    if (shouldShowRequestPermissionRationale(
60
+                            Manifest.permission.READ_EXTERNAL_STORAGE)) {
61
+
62
+                    }
63
+
64
+                    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
65
+                            MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
66
+
67
+                    return;
68
+                }
69
+                Matisse.from(PublishActivity.this)
70
+                        .choose(MimeType.of(MimeType.JPEG,MimeType.PNG))
71
+                        .countable(true)
72
+                        .thumbnailScale(0.3f)
73
+                        .maxSelectable(9)
74
+                        .imageEngine(new PicassoEngine())
75
+                        .forResult(REQUEST_CODE_CHOOSE);
76
+            }
77
+        });
78
+    }
79
+
80
+    @Override
81
+    public boolean onCreateOptionsMenu(Menu menu) {
82
+        getMenuInflater().inflate(R.menu.menu_publish,menu);
83
+        return true;
84
+    }
85
+
86
+    @Override
87
+    public boolean onOptionsItemSelected(MenuItem item) {
88
+        switch (item.getItemId()){
89
+            case android.R.id.home:
90
+                finish();
91
+                break;
92
+            case R.id.menu_publish_send:
93
+                break;
94
+        }
95
+        return true;
96
+    }
97
+
98
+    @Override
99
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
100
+        if(requestCode==MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE){
101
+            for(int i=0;i<permissions.length;i++){
102
+                if(permissions[i].equals(Manifest.permission.READ_EXTERNAL_STORAGE)
103
+                        && grantResults[i] == PackageManager.PERMISSION_GRANTED){
104
+                    Matisse.from(PublishActivity.this)
105
+                            .choose(MimeType.of(MimeType.JPEG,MimeType.PNG))
106
+                            .countable(true)
107
+                            .thumbnailScale(0.85f)
108
+                            .maxSelectable(9)
109
+                            .imageEngine(new PicassoEngine())
110
+                            .forResult(REQUEST_CODE_CHOOSE);
111
+                }
112
+            }
113
+        }
114
+    }
115
+
116
+    @Override
117
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
118
+        if(requestCode==REQUEST_CODE_CHOOSE && data !=null){
119
+
120
+            List<Uri> uris = null;
121
+            try {
122
+                uris = Matisse.obtainResult(data);
123
+            } catch (Exception e) {
124
+                e.printStackTrace();
125
+                return;
126
+            }
127
+            if(uris==null)
128
+                return;
129
+
130
+           this.gridAdapter.addAll(uris);
131
+           this.gridAdapter.notifyDataSetChanged();
132
+        }
133
+    }
134
+}

+ 11
- 3
lesson03/src/main/java/io/hsiao/lesson03/data/AsyncListLoader.java Ver fichero

@@ -26,22 +26,30 @@ public class AsyncListLoader extends AsyncTask<String, Boolean, JSONArray> {
26 26
     @Override
27 27
     protected JSONArray doInBackground(String... args) {
28 28
         JSONArray data = new HttpAPI("http://reefun.cn/real360/api").testGet(args[0]);
29
-        if(data.size()<1){
29
+        if(data !=null && data.size()<1){
30 30
             adapter.setDataRunUp(true);
31 31
         }
32
+        try {
33
+            Thread.sleep(1000);
34
+        } catch (InterruptedException e) {
35
+            e.printStackTrace();
36
+        }
32 37
         publishProgress(true);
33 38
         return data;
34 39
     }
35 40
 
36 41
     @Override
37 42
     protected void onPostExecute(JSONArray data) {
38
-        adapter.addAll(data);
39
-        adapter.notifyDataSetChanged();
43
+        if(data !=null) {
44
+            adapter.addAll(data);
45
+            adapter.notifyDataSetChanged();
46
+        }
40 47
     }
41 48
 
42 49
     @Override
43 50
     protected void onProgressUpdate(Boolean... values) {
44 51
         if (values[0]) {
52
+            if(bar !=null)
45 53
             bar.setVisibility(View.GONE);
46 54
         }
47 55
     }

+ 3
- 2
lesson03/src/main/java/io/hsiao/lesson03/data/HttpAPI.java Ver fichero

@@ -5,6 +5,7 @@ import android.util.Log;
5 5
 import com.alibaba.fastjson.JSONArray;
6 6
 
7 7
 import java.io.File;
8
+import java.io.IOException;
8 9
 
9 10
 import io.hsiao.lesson03.MainListAdapter;
10 11
 import okhttp3.Cache;
@@ -36,8 +37,8 @@ public class HttpAPI {
36 37
                 .url(reqUrl)
37 38
                 .build();
38 39
         try (Response resp = client.newCall(req).execute()) {
39
-            String retString = resp.body().string();
40
-           return JSONArray.parseArray(retString);
40
+                String retString = resp.body().string();
41
+                return JSONArray.parseArray(retString);
41 42
         } catch (Exception ex) {
42 43
             ex.printStackTrace();
43 44
         }

BIN
lesson03/src/main/res/drawable-hdpi/ic_action_add.png Ver fichero


BIN
lesson03/src/main/res/drawable-hdpi/ic_action_collections.png Ver fichero


BIN
lesson03/src/main/res/drawable-hdpi/ic_action_favor_border.png Ver fichero


BIN
lesson03/src/main/res/drawable-hdpi/ic_action_favors.png Ver fichero


BIN
lesson03/src/main/res/drawable-hdpi/ic_action_send.png Ver fichero


BIN
lesson03/src/main/res/drawable-hdpi/ic_action_user.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_add.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_collections.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_favor_border.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_favors.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_send.png Ver fichero


BIN
lesson03/src/main/res/drawable-mdpi/ic_action_user.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_add.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_collections.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_favor_border.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_favors.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_send.png Ver fichero


BIN
lesson03/src/main/res/drawable-xhdpi/ic_action_user.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_add.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_collections.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_favor_border.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_favors.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_send.png Ver fichero


BIN
lesson03/src/main/res/drawable-xxhdpi/ic_action_user.png Ver fichero


+ 13
- 0
lesson03/src/main/res/layout/activity_gvr_video.xml Ver fichero

@@ -0,0 +1,13 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+    xmlns:app="http://schemas.android.com/apk/res-auto"
4
+    xmlns:tools="http://schemas.android.com/tools"
5
+    android:layout_width="match_parent"
6
+    android:layout_height="match_parent"
7
+    tools:context="io.hsiao.lesson03.PanoActivity">
8
+
9
+    <com.google.vr.sdk.widgets.video.VrVideoView
10
+        android:id="@+id/gvr_videoview"
11
+        android:layout_width="match_parent"
12
+        android:layout_height="match_parent"></com.google.vr.sdk.widgets.video.VrVideoView>
13
+</android.support.constraint.ConstraintLayout>

+ 16
- 0
lesson03/src/main/res/layout/activity_gvr_view.xml Ver fichero

@@ -0,0 +1,16 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+    xmlns:app="http://schemas.android.com/apk/res-auto"
4
+    xmlns:tools="http://schemas.android.com/tools"
5
+    android:layout_width="match_parent"
6
+    android:layout_height="match_parent"
7
+    tools:context="io.hsiao.lesson03.PanoActivity">
8
+
9
+    <com.google.vr.sdk.widgets.pano.VrPanoramaView
10
+        android:id="@+id/gvr_pano_view"
11
+        android:layout_width="match_parent"
12
+        android:layout_height="match_parent"
13
+        android:scrollbars="@null"
14
+        />
15
+
16
+</android.support.constraint.ConstraintLayout>

+ 23
- 11
lesson03/src/main/res/layout/activity_main.xml Ver fichero

@@ -6,25 +6,37 @@
6 6
     android:layout_height="match_parent"
7 7
     tools:context="io.hsiao.lesson03.MainActivity">
8 8
 
9
+    <GridView
10
+        android:id="@+id/main_gridview"
11
+        android:layout_width="0dp"
12
+        android:layout_height="0dp"
13
+        android:horizontalSpacing="1dp"
14
+        android:numColumns="@integer/main_grid_column_count"
15
+        android:verticalSpacing="20dp"
16
+        app:layout_constraintBottom_toBottomOf="parent"
17
+        app:layout_constraintEnd_toEndOf="parent"
18
+        app:layout_constraintHorizontal_bias="0.0"
19
+        app:layout_constraintStart_toStartOf="parent"
20
+        app:layout_constraintTop_toBottomOf="@+id/main_toolbar" />
21
+
22
+    <android.support.v7.widget.Toolbar
23
+        android:id="@+id/main_toolbar"
24
+        android:layout_width="match_parent"
25
+        android:layout_height="wrap_content"
26
+        android:background="?attr/colorPrimary"
27
+        android:minHeight="?attr/actionBarSize"
28
+        android:theme="?attr/actionBarTheme" />
29
+
9 30
     <ProgressBar
10 31
         android:id="@+id/progressBar"
11 32
         style="@style/Widget.AppCompat.ProgressBar"
12 33
         android:layout_width="wrap_content"
13 34
         android:layout_height="wrap_content"
14
-        android:layout_marginBottom="8dp"
15
-        android:layout_marginEnd="8dp"
16
-        android:layout_marginStart="8dp"
17
-        android:layout_marginTop="8dp"
18 35
         android:indeterminate="false"
19 36
         android:visibility="gone"
20
-        app:layout_constraintBottom_toBottomOf="@+id/main_listview"
37
+        app:layout_constraintBottom_toBottomOf="parent"
21 38
         app:layout_constraintEnd_toEndOf="parent"
22 39
         app:layout_constraintStart_toStartOf="parent"
23
-        app:layout_constraintTop_toTopOf="@+id/main_listview" />
40
+        app:layout_constraintTop_toTopOf="parent" />
24 41
 
25
-    <ListView
26
-        android:id="@+id/main_listview"
27
-        android:layout_width="match_parent"
28
-        android:layout_height="match_parent"
29
-        android:divider="@color/colorPrimary" />
30 42
 </android.support.constraint.ConstraintLayout>

+ 97
- 0
lesson03/src/main/res/layout/activity_publish.xml Ver fichero

@@ -0,0 +1,97 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+    xmlns:app="http://schemas.android.com/apk/res-auto"
4
+    xmlns:tools="http://schemas.android.com/tools"
5
+    android:layout_width="match_parent"
6
+    android:layout_height="match_parent"
7
+    tools:context="io.hsiao.lesson03.PublishActivity">
8
+
9
+
10
+    <ScrollView
11
+        android:id="@+id/scrollView2"
12
+        android:layout_width="0dp"
13
+        android:layout_height="0dp"
14
+        android:fillViewport="true"
15
+        app:layout_constraintBottom_toBottomOf="parent"
16
+        app:layout_constraintEnd_toEndOf="parent"
17
+        app:layout_constraintStart_toStartOf="parent"
18
+        app:layout_constraintTop_toBottomOf="@+id/publish_toolbar">
19
+
20
+        <android.support.constraint.ConstraintLayout
21
+            android:layout_width="match_parent"
22
+            android:layout_height="match_parent">
23
+
24
+            <EditText
25
+                android:id="@+id/publish_txt_title"
26
+                android:layout_width="0dp"
27
+                android:layout_height="wrap_content"
28
+                android:layout_marginEnd="8dp"
29
+                android:layout_marginStart="8dp"
30
+                android:layout_marginTop="8dp"
31
+                android:ems="10"
32
+                android:hint="标题"
33
+                android:inputType="textPersonName"
34
+                android:minLines="@integer/publish_desc_lines"
35
+                android:textSize="12sp"
36
+                app:layout_constraintEnd_toEndOf="parent"
37
+                app:layout_constraintStart_toStartOf="parent"
38
+                app:layout_constraintTop_toTopOf="parent" />
39
+
40
+            <EditText
41
+                android:id="@+id/publish_txt_desc"
42
+                android:layout_width="0dp"
43
+                android:layout_height="100dp"
44
+                android:layout_marginEnd="8dp"
45
+                android:layout_marginStart="8dp"
46
+                android:layout_marginTop="8dp"
47
+                android:contentDescription=" "
48
+                android:ems="10"
49
+                android:gravity="top"
50
+                android:hint="简述"
51
+                android:inputType="textMultiLine"
52
+                android:singleLine="false"
53
+                android:textSize="12sp"
54
+                app:layout_constraintEnd_toEndOf="parent"
55
+                app:layout_constraintStart_toStartOf="parent"
56
+                app:layout_constraintTop_toBottomOf="@+id/publish_txt_title" />
57
+
58
+            <ImageButton
59
+                android:id="@+id/publish_choose_btn"
60
+                android:layout_width="wrap_content"
61
+                android:layout_height="wrap_content"
62
+                android:layout_marginStart="8dp"
63
+                android:layout_marginTop="8dp"
64
+                app:layout_constraintStart_toStartOf="parent"
65
+                app:layout_constraintTop_toBottomOf="@+id/publish_txt_desc"
66
+                app:srcCompat="@drawable/ic_action_collections" />
67
+
68
+            <GridView
69
+                android:id="@+id/publish_gridview"
70
+                android:layout_width="0dp"
71
+                android:layout_height="0dp"
72
+                android:layout_marginEnd="8dp"
73
+                android:layout_marginStart="8dp"
74
+                android:layout_marginTop="8dp"
75
+                android:numColumns="@integer/main_grid_column_count"
76
+                app:layout_constraintBottom_toBottomOf="parent"
77
+                app:layout_constraintEnd_toEndOf="parent"
78
+                app:layout_constraintStart_toStartOf="parent"
79
+                app:layout_constraintTop_toBottomOf="@id/publish_choose_btn" />
80
+
81
+        </android.support.constraint.ConstraintLayout>
82
+
83
+    </ScrollView>
84
+
85
+    <android.support.v7.widget.Toolbar
86
+        android:id="@+id/publish_toolbar"
87
+        android:layout_width="match_parent"
88
+        android:layout_height="wrap_content"
89
+        android:background="?attr/colorPrimary"
90
+        android:minHeight="?attr/actionBarSize"
91
+        android:theme="?attr/actionBarTheme"
92
+        app:layout_constraintEnd_toEndOf="parent"
93
+        app:layout_constraintStart_toStartOf="parent"
94
+        app:layout_constraintTop_toTopOf="parent"
95
+        app:title="发布照片"></android.support.v7.widget.Toolbar>
96
+
97
+</android.support.constraint.ConstraintLayout>

lesson03/src/main/res/layout/activity_pano.xml → lesson03/src/main/res/layout/activity_publish_grid.xml Ver fichero

@@ -1,22 +1,27 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2 2
 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 3
     xmlns:app="http://schemas.android.com/apk/res-auto"
4
-    xmlns:tools="http://schemas.android.com/tools"
5 4
     android:layout_width="match_parent"
6
-    android:layout_height="match_parent"
7
-    tools:context="io.hsiao.lesson03.PanoActivity">
5
+    android:layout_height="match_parent">
8 6
 
9 7
     <ImageView
10
-        android:id="@+id/pano_imgview"
8
+        android:id="@+id/publish_grid_img"
11 9
         android:layout_width="wrap_content"
12 10
         android:layout_height="wrap_content"
13
-        android:layout_marginBottom="8dp"
14
-        android:layout_marginEnd="8dp"
15
-        android:layout_marginStart="8dp"
16
-        android:layout_marginTop="8dp"
17 11
         app:layout_constraintBottom_toBottomOf="parent"
18 12
         app:layout_constraintEnd_toEndOf="parent"
19 13
         app:layout_constraintStart_toStartOf="parent"
20 14
         app:layout_constraintTop_toTopOf="parent"
21 15
         app:srcCompat="@android:drawable/ic_menu_report_image" />
16
+
17
+    <ImageButton
18
+        android:id="@+id/publish_grid_close"
19
+        android:layout_width="25dp"
20
+        android:layout_height="25dp"
21
+        android:layout_marginEnd="8dp"
22
+        android:layout_marginTop="8dp"
23
+        android:background="@color/colorWhite"
24
+        app:layout_constraintEnd_toEndOf="@+id/publish_grid_img"
25
+        app:layout_constraintTop_toTopOf="@+id/publish_grid_img"
26
+        app:srcCompat="@android:drawable/ic_menu_close_clear_cancel" />
22 27
 </android.support.constraint.ConstraintLayout>

+ 37
- 28
lesson03/src/main/res/layout/main_listview_item.xml Ver fichero

@@ -2,6 +2,7 @@
2 2
 
3 3
 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 4
     xmlns:app="http://schemas.android.com/apk/res-auto"
5
+    xmlns:tools="http://schemas.android.com/tools"
5 6
     android:layout_width="match_parent"
6 7
     android:layout_height="match_parent"
7 8
     android:layout_weight="1">
@@ -9,65 +10,73 @@
9 10
 
10 11
     <ImageView
11 12
         android:id="@+id/main_list_thumnail"
12
-        android:layout_width="150dp"
13
-        android:layout_height="150dp"
14
-        android:layout_marginStart="8dp"
15
-        android:layout_marginTop="8dp"
13
+        android:layout_width="wrap_content"
14
+        android:layout_height="wrap_content"
16 15
         android:layout_weight="1"
17 16
         app:layout_constraintStart_toStartOf="parent"
18
-        app:layout_constraintTop_toTopOf="@+id/main_list_title"
17
+        app:layout_constraintTop_toTopOf="parent"
19 18
         app:srcCompat="@android:drawable/ic_menu_report_image" />
20 19
 
21 20
     <TextView
22 21
         android:id="@+id/main_list_title"
23
-        android:layout_width="wrap_content"
22
+        android:layout_width="0dp"
24 23
         android:layout_height="wrap_content"
25
-        android:layout_marginEnd="8dp"
26
-        android:layout_marginStart="8dp"
27 24
         android:layout_marginTop="8dp"
28 25
         android:layout_weight="1"
26
+        android:paddingLeft="5dp"
27
+        android:paddingRight="5dp"
29 28
         android:text="TextView"
29
+        android:textSize="12sp"
30 30
         app:layout_constraintEnd_toEndOf="parent"
31
-        app:layout_constraintStart_toEndOf="@+id/main_list_thumnail"
32
-        app:layout_constraintTop_toTopOf="parent" />
31
+        app:layout_constraintStart_toStartOf="parent"
32
+        app:layout_constraintTop_toBottomOf="@+id/main_list_thumnail" />
33 33
 
34 34
     <TextView
35 35
         android:id="@+id/main_list_desc"
36
-        android:layout_width="wrap_content"
36
+        android:layout_width="0dp"
37 37
         android:layout_height="wrap_content"
38
-        android:layout_marginEnd="8dp"
39
-        android:layout_marginStart="8dp"
40 38
         android:layout_marginTop="8dp"
41 39
         android:layout_weight="1"
42 40
         android:text="TextView"
43
-        app:layout_constraintEnd_toEndOf="parent"
44
-        app:layout_constraintStart_toEndOf="@+id/main_list_thumnail"
41
+        android:textColor="@color/colorGrey"
42
+        android:textSize="13sp"
43
+        android:visibility="gone"
44
+        app:layout_constraintEnd_toEndOf="@+id/main_list_title"
45
+        app:layout_constraintStart_toStartOf="parent"
45 46
         app:layout_constraintTop_toBottomOf="@+id/main_list_title" />
46 47
 
47 48
     <TextView
48 49
         android:id="@+id/main_list_create_time"
49
-        android:layout_width="wrap_content"
50
+        android:layout_width="0dp"
50 51
         android:layout_height="wrap_content"
52
+        android:layout_marginBottom="8dp"
51 53
         android:layout_marginEnd="8dp"
52
-        android:layout_marginStart="8dp"
53
-        android:layout_marginTop="8dp"
54 54
         android:layout_weight="1"
55
-        android:text="TextView"
56
-        app:layout_constraintEnd_toEndOf="parent"
57
-        app:layout_constraintStart_toEndOf="@+id/main_list_thumnail"
58
-        app:layout_constraintTop_toBottomOf="@+id/main_list_desc" />
55
+        android:text="2018-01-01"
56
+        android:textColor="@color/colorWhite"
57
+        android:textSize="10sp"
58
+        app:layout_constraintBottom_toBottomOf="@+id/main_list_thumnail"
59
+        app:layout_constraintEnd_toEndOf="@+id/main_list_thumnail" />
59 60
 
60 61
     <TextView
61 62
         android:id="@+id/main_list_likes"
62
-        android:layout_width="wrap_content"
63
+        android:layout_width="0dp"
63 64
         android:layout_height="wrap_content"
64 65
         android:layout_marginEnd="8dp"
65
-        android:layout_marginStart="8dp"
66 66
         android:layout_marginTop="8dp"
67 67
         android:layout_weight="1"
68
-        android:text="TextView"
69
-        app:layout_constraintEnd_toEndOf="parent"
70
-        app:layout_constraintStart_toEndOf="@+id/main_list_thumnail"
71
-        app:layout_constraintTop_toBottomOf="@+id/main_list_create_time" />
68
+        android:text="0"
69
+        android:textColor="@color/colorWhite"
70
+        android:textSize="10sp"
71
+        app:layout_constraintEnd_toEndOf="@+id/main_list_thumnail"
72
+        app:layout_constraintTop_toTopOf="@+id/main_list_thumnail" />
73
+
74
+    <ImageView
75
+        android:id="@+id/ic_likes"
76
+        android:layout_width="15dp"
77
+        android:layout_height="15dp"
78
+        app:layout_constraintBottom_toBottomOf="@+id/main_list_likes"
79
+        app:layout_constraintEnd_toStartOf="@+id/main_list_likes"
80
+        app:srcCompat="@drawable/ic_action_favor_border" />
72 81
 
73 82
 </android.support.constraint.ConstraintLayout>

+ 26
- 0
lesson03/src/main/res/menu/menu_main.xml Ver fichero

@@ -0,0 +1,26 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<menu xmlns:app="http://schemas.android.com/apk/res-auto"
3
+    xmlns:android="http://schemas.android.com/apk/res/android">
4
+
5
+    <item
6
+        android:id="@+id/menu_publish"
7
+        android:icon="@drawable/ic_action_add"
8
+        android:title="发布"
9
+        app:showAsAction="always" />
10
+    <item
11
+        android:id="@+id/menu_topic"
12
+        android:icon="@drawable/ic_action_collections"
13
+        android:title="主题"
14
+        app:showAsAction="always" />
15
+    <item
16
+        android:id="@+id/menu_usercenter"
17
+        android:icon="@drawable/ic_action_user"
18
+        android:title="用户中心"
19
+        app:showAsAction="always" />
20
+    <item
21
+        android:id="@+id/menu_settings"
22
+        android:title="设置" />
23
+    <item
24
+        android:id="@+id/menu_welcome"
25
+        android:title="新手指南" />
26
+</menu>

+ 10
- 0
lesson03/src/main/res/menu/menu_publish.xml Ver fichero

@@ -0,0 +1,10 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<menu xmlns:app="http://schemas.android.com/apk/res-auto"
3
+    xmlns:android="http://schemas.android.com/apk/res/android">
4
+
5
+    <item
6
+        android:id="@+id/menu_publish_send"
7
+        android:icon="@drawable/ic_action_send"
8
+        android:title="发布"
9
+        app:showAsAction="always" />
10
+</menu>

+ 11
- 0
lesson03/src/main/res/values-v21/styles.xml Ver fichero

@@ -0,0 +1,11 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<resources>
3
+
4
+    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
5
+        <!-- Customize your theme here. -->
6
+        <item name="colorPrimary">@color/colorPrimary</item>
7
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
8
+        <item name="colorAccent">@color/colorAccent</item>
9
+        <item name="android:statusBarColor">@color/colorPrimary</item>
10
+    </style>
11
+</resources>

+ 6
- 3
lesson03/src/main/res/values/colors.xml Ver fichero

@@ -1,6 +1,9 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2 2
 <resources>
3
-    <color name="colorPrimary">#ebebeb</color>
4
-    <color name="colorPrimaryDark">#303F9F</color>
5
-    <color name="colorAccent">#FF4081</color>
3
+    <color name="colorPrimary">#0cc691</color>
4
+    <color name="colorPrimaryDark">#0d795a</color>
5
+    <color name="colorAccent">#b94f14</color>
6
+    <color name="colorGrey">#888888</color>
7
+    <color name="colorWhite">#ffffff</color>
8
+    <color name="colorNone">#00ffffff</color>
6 9
 </resources>

+ 4
- 0
lesson03/src/main/res/values/integers.xml Ver fichero

@@ -0,0 +1,4 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<resources>
3
+    <integer name="publish_desc_lines">4</integer>
4
+</resources>

+ 2
- 1
lesson03/src/main/res/values/strings.xml Ver fichero

@@ -1,3 +1,4 @@
1 1
 <resources>
2
-    <string name="app_name">lesson03</string>
2
+    <string name="app_name">友图</string>
3
+    <integer name="main_grid_column_count">3</integer>
3 4
 </resources>

+ 1
- 1
lesson03/src/main/res/values/styles.xml Ver fichero

@@ -1,7 +1,7 @@
1 1
 <resources>
2 2
 
3 3
     <!-- Base application theme. -->
4
-    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
4
+    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
5 5
         <!-- Customize your theme here. -->
6 6
         <item name="colorPrimary">@color/colorPrimary</item>
7 7
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

Loading…
Cancelar
Guardar