@@ -20,6 +20,7 @@ import android.view.LayoutInflater;  | 
            ||
| 20 | 20 | 
                import android.view.MenuItem;  | 
            
| 21 | 21 | 
                import android.view.View;  | 
            
| 22 | 22 | 
                import android.view.ViewGroup;  | 
            
| 23 | 
                +import android.view.animation.CycleInterpolator;  | 
            |
| 23 | 24 | 
                import android.widget.ImageButton;  | 
            
| 24 | 25 | 
                import android.widget.ImageView;  | 
            
| 25 | 26 | 
                import android.widget.TextView;  | 
            
                @@ -31,10 +32,11 @@ import com.android.common.utils.TimeUtils;  | 
            ||
| 31 | 32 | 
                import com.android.views.indicators.Indicator;  | 
            
| 32 | 33 | 
                import com.android.views.indicators.IndicatorViewPager;  | 
            
| 33 | 34 | 
                import com.android.views.indicators.SpringBar;  | 
            
| 35 | 
                +import com.hanks.htextview.HTextView;  | 
            |
| 36 | 
                +import com.hanks.htextview.HTextViewType;  | 
            |
| 34 | 37 | 
                import com.umeng.analytics.MobclickAgent;  | 
            
| 35 | 38 | 
                 | 
            
| 36 | 39 | 
                import java.io.File;  | 
            
| 37 | 
                -import java.sql.Time;  | 
            |
| 38 | 40 | 
                 | 
            
| 39 | 41 | 
                import ai.pai.client.R;  | 
            
| 40 | 42 | 
                import ai.pai.client.beans.GroupInfo;  | 
            
                @@ -63,13 +65,22 @@ public class MainActivity extends AppCompatActivity  | 
            ||
| 63 | 65 | 
                private PersonInfoPopup personInfoPopup;  | 
            
| 64 | 66 | 
                private ImageButton callGuideBtn;  | 
            
| 65 | 67 | 
                private ImageButton gatherBtn;  | 
            
| 68 | 
                + private ImageButton scanQRBtn;  | 
            |
| 69 | 
                + private ImageButton addGroupBtn;  | 
            |
| 66 | 70 | 
                private TextView gatherInfoTextView;  | 
            
| 71 | 
                + private HTextView scanQRHintTextView;  | 
            |
| 72 | 
                + private HTextView addGroupHintTextView;  | 
            |
| 73 | 
                + private boolean isGuideShow;  | 
            |
| 74 | 
                + private boolean isDestroy;  | 
            |
| 67 | 75 | 
                 | 
            
| 68 | 76 | 
                @Override  | 
            
| 69 | 77 | 
                     protected void onCreate(Bundle savedInstanceState) {
               | 
            
| 70 | 78 | 
                super.onCreate(savedInstanceState);  | 
            
| 71 | 79 | 
                setContentView(R.layout.activity_main);  | 
            
| 72 | 
                -  | 
            |
| 80 | 
                + scanQRHintTextView = (HTextView)findViewById(R.id.tv_scan_qr_hint);  | 
            |
| 81 | 
                + addGroupHintTextView = (HTextView)findViewById(R.id.tv_add_group_hint);  | 
            |
| 82 | 
                + scanQRBtn = (ImageButton)findViewById(R.id.floating_btn_scan);  | 
            |
| 83 | 
                + addGroupBtn = (ImageButton)findViewById(R.id.floating_btn_add);  | 
            |
| 73 | 84 | 
                drawer = (DrawerLayout) findViewById(R.id.drawer_layout);  | 
            
| 74 | 85 | 
                NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);  | 
            
| 75 | 86 | 
                navigationView.setNavigationItemSelectedListener(this);  | 
            
                @@ -124,6 +135,7 @@ public class MainActivity extends AppCompatActivity  | 
            ||
| 124 | 135 | 
                 | 
            
| 125 | 136 | 
                @Override  | 
            
| 126 | 137 | 
                     protected void onDestroy() {
               | 
            
| 138 | 
                + isDestroy = true;  | 
            |
| 127 | 139 | 
                super.onDestroy();  | 
            
| 128 | 140 | 
                }  | 
            
| 129 | 141 | 
                 | 
            
                @@ -406,4 +418,42 @@ public class MainActivity extends AppCompatActivity  | 
            ||
| 406 | 418 | 
                }  | 
            
| 407 | 419 | 
                }  | 
            
| 408 | 420 | 
                 | 
            
| 421 | 
                +    public void showGuideAnim(){
               | 
            |
| 422 | 
                +        if(isGuideShow){
               | 
            |
| 423 | 
                + return;  | 
            |
| 424 | 
                + }  | 
            |
| 425 | 
                + isGuideShow = true;  | 
            |
| 426 | 
                + scanQRHintTextView.setVisibility(View.VISIBLE);  | 
            |
| 427 | 
                + scanQRHintTextView.setAnimateType(HTextViewType.TYPER);  | 
            |
| 428 | 
                + scanQRHintTextView.animateText(getString(R.string.click_to_scan_qr));  | 
            |
| 429 | 
                + scanQRBtn.animate().translationX(10).scaleX(1.2f).scaleY(1.2f).setInterpolator(new CycleInterpolator(5)).setDuration(2000).start();  | 
            |
| 430 | 
                +        scanQRHintTextView.postDelayed(new Runnable() {
               | 
            |
| 431 | 
                + @Override  | 
            |
| 432 | 
                +            public void run() {
               | 
            |
| 433 | 
                +                if(isDestroy){
               | 
            |
| 434 | 
                + return;  | 
            |
| 435 | 
                + }  | 
            |
| 436 | 
                +                if(scanQRHintTextView!=null && scanQRHintTextView.isShown()){
               | 
            |
| 437 | 
                + scanQRHintTextView.setVisibility(View.GONE);  | 
            |
| 438 | 
                + }  | 
            |
| 439 | 
                +                if(addGroupHintTextView!=null){
               | 
            |
| 440 | 
                + addGroupHintTextView.setVisibility(View.VISIBLE);  | 
            |
| 441 | 
                + addGroupHintTextView.setAnimateType(HTextViewType.TYPER);  | 
            |
| 442 | 
                + addGroupHintTextView.animateText(getString(R.string.click_to_add_group));  | 
            |
| 443 | 
                + addGroupBtn.animate().translationX(10).scaleX(1.2f).scaleY(1.2f).setInterpolator(new CycleInterpolator(5)).setDuration(2000).start();  | 
            |
| 444 | 
                +                    addGroupHintTextView.postDelayed(new Runnable() {
               | 
            |
| 445 | 
                + @Override  | 
            |
| 446 | 
                +                        public void run() {
               | 
            |
| 447 | 
                +                            if(isDestroy){
               | 
            |
| 448 | 
                + return;  | 
            |
| 449 | 
                + }  | 
            |
| 450 | 
                +                            if(addGroupHintTextView!=null && addGroupHintTextView.isShown()){
               | 
            |
| 451 | 
                + addGroupHintTextView.setVisibility(View.GONE);  | 
            |
| 452 | 
                + }  | 
            |
| 453 | 
                + }  | 
            |
| 454 | 
                + },3000);  | 
            |
| 455 | 
                + }  | 
            |
| 456 | 
                + }  | 
            |
| 457 | 
                + },3000);  | 
            |
| 458 | 
                + }  | 
            |
| 409 | 459 | 
                }  | 
            
                @@ -38,6 +38,7 @@ import java.util.Arrays;  | 
            ||
| 38 | 38 | 
                import java.util.HashMap;  | 
            
| 39 | 39 | 
                 | 
            
| 40 | 40 | 
                import ai.pai.client.R;  | 
            
| 41 | 
                +import ai.pai.client.activity.MainActivity;  | 
            |
| 41 | 42 | 
                import ai.pai.client.adapter.RecentPhotoStaggeredAdapter;  | 
            
| 42 | 43 | 
                import ai.pai.client.beans.GroupPhotoItem;  | 
            
| 43 | 44 | 
                import ai.pai.client.db.DBService;  | 
            
                @@ -320,6 +321,13 @@ public class TabRecentPhotoFragment extends BaseFragment implements SwipeRefresh  | 
            ||
| 320 | 321 | 
                DBService.getInstance(context).addRecentPhotos(photoItems);  | 
            
| 321 | 322 | 
                isDataRefreshed = true;  | 
            
| 322 | 323 | 
                }  | 
            
| 324 | 
                +                if(isAdded() && refreshAdapter!=null && refreshAdapter.getPhotoList()!=null && refreshAdapter.getPhotoList().size()==0){
               | 
            |
| 325 | 
                +                    if(getActivity() instanceof  MainActivity){
               | 
            |
| 326 | 
                + MainActivity mainActivity = (MainActivity)getActivity();  | 
            |
| 327 | 
                + mainActivity.showGuideAnim();  | 
            |
| 328 | 
                + }  | 
            |
| 329 | 
                + }  | 
            |
| 330 | 
                +  | 
            |
| 323 | 331 | 
                }  | 
            
| 324 | 332 | 
                };  | 
            
| 325 | 333 | 
                fetchPhotosTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.HOME_PHOTO_URL);  | 
            
                @@ -2,8 +2,8 @@  | 
            ||
| 2 | 2 | 
                <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"  | 
            
| 3 | 3 | 
                android:layout_width="match_parent"  | 
            
| 4 | 4 | 
                android:layout_height="match_parent"  | 
            
| 5 | 
                - android:fitsSystemWindows="true"  | 
            |
| 6 | 
                - >  | 
            |
| 5 | 
                + xmlns:htext="http://schemas.android.com/apk/res-auto"  | 
            |
| 6 | 
                + android:fitsSystemWindows="true">  | 
            |
| 7 | 7 | 
                 | 
            
| 8 | 8 | 
                <include layout="@layout/content_main" />  | 
            
| 9 | 9 | 
                 | 
            
                @@ -18,6 +18,20 @@  | 
            ||
| 18 | 18 | 
                android:layout_marginTop="3dp"  | 
            
| 19 | 19 | 
                android:background="@drawable/floating_add_selector"/>  | 
            
| 20 | 20 | 
                 | 
            
| 21 | 
                + <com.hanks.htextview.HTextView  | 
            |
| 22 | 
                + android:id="@+id/tv_add_group_hint"  | 
            |
| 23 | 
                + android:layout_width="match_parent"  | 
            |
| 24 | 
                + android:layout_height="56dp"  | 
            |
| 25 | 
                + android:gravity="center"  | 
            |
| 26 | 
                + android:text="@string/click_to_add_group"  | 
            |
| 27 | 
                + android:layout_gravity="bottom|start"  | 
            |
| 28 | 
                + android:layout_marginRight="60dp"  | 
            |
| 29 | 
                + android:layout_marginBottom="6dp"  | 
            |
| 30 | 
                + android:layout_marginTop="3dp"  | 
            |
| 31 | 
                + htext:animateType="typer"  | 
            |
| 32 | 
                + android:visibility="gone"  | 
            |
| 33 | 
                + android:textSize="17sp"/>  | 
            |
| 34 | 
                +  | 
            |
| 21 | 35 | 
                <ImageButton  | 
            
| 22 | 36 | 
                android:id="@+id/floating_btn_scan"  | 
            
| 23 | 37 | 
                android:layout_width="56dp"  | 
            
                @@ -27,6 +41,20 @@  | 
            ||
| 27 | 41 | 
                android:layout_marginBottom="66dp"  | 
            
| 28 | 42 | 
                android:background="@drawable/floating_qrscan_selector"/>  | 
            
| 29 | 43 | 
                 | 
            
| 44 | 
                + <com.hanks.htextview.HTextView  | 
            |
| 45 | 
                + android:id="@+id/tv_scan_qr_hint"  | 
            |
| 46 | 
                + android:layout_width="match_parent"  | 
            |
| 47 | 
                + android:layout_height="56dp"  | 
            |
| 48 | 
                + android:gravity="center"  | 
            |
| 49 | 
                + android:text="@string/click_to_scan_qr"  | 
            |
| 50 | 
                + android:layout_gravity="bottom|start"  | 
            |
| 51 | 
                + android:layout_marginRight="60dp"  | 
            |
| 52 | 
                + android:layout_marginBottom="66dp"  | 
            |
| 53 | 
                + android:layout_marginTop="3dp"  | 
            |
| 54 | 
                + htext:animateType="typer"  | 
            |
| 55 | 
                + android:visibility="gone"  | 
            |
| 56 | 
                + android:textSize="17sp"/>  | 
            |
| 57 | 
                +  | 
            |
| 30 | 58 | 
                <ImageButton  | 
            
| 31 | 59 | 
                android:id="@+id/floating_btn_call"  | 
            
| 32 | 60 | 
                android:layout_width="56dp"  | 
            
                @@ -252,4 +252,8 @@  | 
            ||
| 252 | 252 | 
                <string name="group_admin_not_me">您不是该群的管理员,无法删除</string>  | 
            
| 253 | 253 | 
                 | 
            
| 254 | 254 | 
                <string name="click_to_take_photo">点我拍照,记录您的精彩瞬间吧</string>  | 
            
| 255 | 
                +  | 
            |
| 256 | 
                + <string name="click_to_add_group">点我可以新建拍照群组哦</string>  | 
            |
| 257 | 
                +  | 
            |
| 258 | 
                + <string name="click_to_scan_qr"> 点我扫码加入朋友建的群组吧</string>  | 
            |
| 255 | 259 | 
                </resources>  |