瀏覽代碼

活动页

xiongzhu 7 年之前
父節點
當前提交
1bd0903660

+ 1 - 0
app/build.gradle

@@ -112,4 +112,5 @@ dependencies {
     implementation 'com.google.android:flexbox:1.0.0'
     implementation 'com.liulishuo.filedownloader:library:1.7.5'
     implementation 'com.blankj:utilcode:1.10.0'
+    implementation 'com.youth.banner:banner:1.4.10'
 }

+ 2 - 2
app/src/main/AndroidManifest.xml

@@ -261,7 +261,6 @@
             </intent-filter>
         </receiver>
 
-
         <!-- 支付宝 -->
         <activity
             android:name="com.alipay.sdk.app.H5PayActivity"
@@ -465,7 +464,8 @@
         <activity android:name=".ui.activity.promote.PromoteDetailActivity" />
         <activity android:name=".ui.activity.MyWalletActivity" />
         <activity android:name=".ui.activity.WithdrawActivity" />
-        <activity android:name=".ui.activity.WithdrawSuccessActivity"></activity>
+        <activity android:name=".ui.activity.WithdrawSuccessActivity" />
+        <activity android:name=".ui.activity.WebViewActivity"></activity>
     </application>
 
 </manifest>

+ 16 - 0
app/src/main/java/com/android/chmo/http/response/TopActivityRes.java

@@ -0,0 +1,16 @@
+package com.android.chmo.http.response;
+
+
+import java.util.List;
+
+public class TopActivityRes extends Res {
+    public List<TopActivity> data;
+
+    public class TopActivity {
+        public String url;
+        public String banner;
+        public String Pic;
+        public String Caption;
+        public String Intro;
+    }
+}

+ 14 - 8
app/src/main/java/com/android/chmo/http/service/ActivitiesService.java

@@ -22,20 +22,20 @@ public class ActivitiesService {
     }
 
     /**
-     *  活动列表
+     * 活动列表
      */
     public static Callback.Cancelable getActivityList(int pageNo, RequestCallback callback) {
         LoginUser user = ChmoApplication.getApp().getLoginUser();
         RequestParams params = getRequestParams();
         params.addQueryStringParameter("action", "dogetpartty");
         params.addQueryStringParameter("memberpk", user.pk);
-        params.addQueryStringParameter("index", pageNo+"");
-        params.addQueryStringParameter("size", Constants.PAGE_SIZE+"");
+        params.addQueryStringParameter("index", pageNo + "");
+        params.addQueryStringParameter("size", Constants.PAGE_SIZE + "");
 
         return HttpApi.GET(params, callback);
     }
 
-    public static  Callback.Cancelable signIn(ActivitiesInfo info, String member, String contact, String count, String price, RequestCallback callback) {
+    public static Callback.Cancelable signIn(ActivitiesInfo info, String member, String contact, String count, String price, RequestCallback callback) {
         RequestParams params = getRequestParams();
         params.addQueryStringParameter("action", "doEnroll");
         params.addQueryStringParameter("PK", ChmoApplication.getApp().getLoginUser().pk);
@@ -49,21 +49,21 @@ public class ActivitiesService {
     }
 
     /**
-     *  我参加的活动列表
+     * 我参加的活动列表
      */
     public static Callback.Cancelable getMyActivities(int pageNo, RequestCallback callback) {
         LoginUser user = ChmoApplication.getApp().getLoginUser();
         RequestParams params = getRequestParams();
         params.addQueryStringParameter("action", "doqrypartty");
         params.addQueryStringParameter("PK", user.pk);
-        params.addQueryStringParameter("index", pageNo+"");
-        params.addQueryStringParameter("size", Constants.PAGE_SIZE+"");
+        params.addQueryStringParameter("index", pageNo + "");
+        params.addQueryStringParameter("size", Constants.PAGE_SIZE + "");
         return HttpApi.GET(params, callback);
     }
 
 
     /**
-     *  我参加的活动列表
+     * 我参加的活动列表
      */
     public static Callback.Cancelable getBanner(RequestCallback callback) {
         LoginUser user = ChmoApplication.getApp().getLoginUser();
@@ -71,4 +71,10 @@ public class ActivitiesService {
         params.addQueryStringParameter("action", "doGetBanner");
         return HttpApi.GET(params, callback);
     }
+
+    public static Callback.Cancelable getTopActivities(RequestCallback callback) {
+        RequestParams params = getRequestParams();
+        params.addQueryStringParameter("action", "dogettoppartty");
+        return HttpApi.GET(params, callback);
+    }
 }

+ 241 - 0
app/src/main/java/com/android/chmo/ui/activity/WebViewActivity.java

@@ -0,0 +1,241 @@
+package com.android.chmo.ui.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.JavascriptInterface;
+import android.webkit.JsPromptResult;
+import android.webkit.JsResult;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.Toast;
+
+import com.android.chmo.R;
+import com.android.chmo.app.ChmoApplication;
+import com.android.chmo.base.BaseActivity;
+import com.android.chmo.http.HttpApi;
+import com.android.chmo.ui.dialog.ShareDialog;
+import com.android.chmo.ui.view.TopBar;
+import com.android.chmo.wxapi.WeChatManager;
+import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
+import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
+import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+
+import butterknife.BindView;
+
+public class WebViewActivity extends BaseActivity implements ShareDialog.OnShareListener {
+    @BindView(R.id.webView)
+    WebView     webView;
+    @BindView(R.id.progressbar)
+    ProgressBar progressBar;
+    @BindView(R.id.top_bar)
+    TopBar      topBar;
+
+    private String      url;
+    private ShareDialog shareDialog;
+    private IWXAPI      iwxapi;
+    private String      shareUrl   = HttpApi.BASE_URL + "share.jsp?type=1&code=" + ChmoApplication.getApp().getLoginUser().qrcode;
+    private String      shareTitle = "千模通告";
+    private String      shareDesc  = "模特,网红,空姐,校花,邀您一键视频验证";
+
+    public static void start(Context context, String url) {
+        Intent intent = new Intent(context, WebViewActivity.class);
+        intent.putExtra("url", url);
+        context.startActivity(intent);
+        ((Activity) context).overridePendingTransition(R.anim.push_right_in, R.anim.push_left_out);
+    }
+
+    @Override
+    protected int getContentResId() {
+        return R.layout.activity_web_view;
+    }
+
+    @Override
+    public void initView() {
+        url = getIntent().getStringExtra("url");
+
+        ImageView imageView = new ImageView(this);
+        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, getResources().getDimensionPixelSize(R.dimen.top_bar_height));
+        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
+        params.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
+        imageView.setLayoutParams(params);
+        imageView.setImageResource(R.mipmap.icon_fenxiang);
+        imageView.setScaleType(ImageView.ScaleType.CENTER);
+        imageView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                share();
+            }
+        });
+        topBar.addView(imageView);
+
+        webView.addJavascriptInterface(this, "chmo");//添加js监听 这样html就能调用客户端
+        webView.setWebChromeClient(webChromeClient);
+        webView.setWebViewClient(webViewClient);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            WebView.setWebContentsDebuggingEnabled(true);
+        }
+
+        WebSettings webSettings = webView.getSettings();
+        webSettings.setUserAgentString(webSettings.getUserAgentString() + " chmo");
+        webSettings.setDomStorageEnabled(true);
+        webSettings.setJavaScriptEnabled(true);//允许使用js
+        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//不使用缓存,只从网络获取数据.
+
+        //支持屏幕缩放
+        webSettings.setSupportZoom(false);
+        webSettings.setDisplayZoomControls(false);
+
+        webView.loadUrl(url);
+
+        shareDialog = new ShareDialog(this);
+        shareDialog.setOnShareListener(this);
+        WeChatManager weChatManager = WeChatManager.getInstance();
+        weChatManager.init(this);
+        iwxapi = weChatManager.getApi();
+    }
+
+    private WebViewClient webViewClient = new WebViewClient() {
+        @Override
+        public void onPageFinished(WebView view, String url) {//页面加载完成
+            progressBar.setVisibility(View.GONE);
+        }
+
+        @Override
+        public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载
+            progressBar.setVisibility(View.VISIBLE);
+        }
+
+        @Override
+        public boolean shouldOverrideUrlLoading(WebView view, String url) {
+            return super.shouldOverrideUrlLoading(view, url);
+        }
+
+    };
+
+    private WebChromeClient webChromeClient = new WebChromeClient() {
+        @Override
+        public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {
+            new AlertDialog.Builder(webView.getContext())
+                    .setMessage(message)
+                    .setPositiveButton("确定", (dialog, which) -> result.confirm())
+                    .setCancelable(false)
+                    .show();
+            return true;
+        }
+
+        @Override
+        public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
+            new AlertDialog.Builder(webView.getContext())
+                    .setMessage(message)
+                    .setPositiveButton("确定", (dialog, which) -> result.confirm())
+                    .setNegativeButton("取消", (dialog, which) -> result.cancel())
+                    .setCancelable(false)
+                    .show();
+            return true;
+        }
+
+        @Override
+        public void onReceivedTitle(WebView view, String title) {
+            super.onReceivedTitle(view, title);
+            topBar.setTitle(title);
+        }
+
+        @Override
+        public void onProgressChanged(WebView view, int newProgress) {
+            progressBar.setProgress(newProgress);
+        }
+    };
+
+    @JavascriptInterface
+    public void modelDetail(String memberPK) {
+        Toast.makeText(this, memberPK, Toast.LENGTH_SHORT).show();
+    }
+
+    @JavascriptInterface
+    public void share() {
+        runOnUiThread(() -> shareDialog.show());
+    }
+
+    @JavascriptInterface
+    public void setShareInfo(String url, String title, String desc) {
+        if (!TextUtils.isEmpty(url)) {
+            if (!url.startsWith("http")) {
+                url = HttpApi.BASE_URL + url;
+            }
+            shareUrl = url;
+        }
+        shareUrl = url;
+        shareTitle = title;
+        shareDesc = desc;
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) {
+            webView.goBack();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        webView.destroy();
+        webView = null;
+    }
+
+    @Override
+    public void onShareWechatSession() {
+        WXWebpageObject webpageObject = new WXWebpageObject(shareUrl);
+        WXMediaMessage message = new WXMediaMessage();
+        message.mediaObject = webpageObject;
+        message.title = shareTitle;
+        message.description = shareDesc;
+        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
+        message.setThumbImage(bmp);
+        SendMessageToWX.Req req = new SendMessageToWX.Req();
+        req.scene = SendMessageToWX.Req.WXSceneSession;
+        req.message = message;
+        boolean success = iwxapi.sendReq(req);
+        Log.d("success", success + "");
+    }
+
+    @Override
+    public void onShareWechatTimeline() {
+        WXWebpageObject webpageObject = new WXWebpageObject(shareUrl);
+        WXMediaMessage message = new WXMediaMessage();
+        message.mediaObject = webpageObject;
+        message.title = shareTitle + "——" + shareDesc;
+        message.description = shareTitle + "——" + shareDesc;
+        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
+        message.setThumbImage(bmp);
+        SendMessageToWX.Req req = new SendMessageToWX.Req();
+        req.scene = SendMessageToWX.Req.WXSceneTimeline;
+        req.message = message;
+        iwxapi.sendReq(req);
+    }
+}

+ 1 - 1
app/src/main/java/com/android/chmo/ui/activity/WelcomeActivity.java

@@ -64,7 +64,7 @@ public class WelcomeActivity extends BaseActivity {
             IMManager.login();
             openPage(MainActivity.class);
         } else {
-            openPage(GuideActivity.class);
+            openPage(MainActivity.class);
         }
         finish();
         overridePendingTransition(R.anim.push_right_in, R.anim.push_left_out);

+ 14 - 28
app/src/main/java/com/android/chmo/ui/adpater/ActivitiesAdapter.java

@@ -19,38 +19,29 @@ import com.android.chmo.utils.XUtilsImage;
 
 public class ActivitiesAdapter extends CommonAdapter<ActivitiesInfo> {
     private BaseActivity baseActivity;
-    private int imgWidth, imgHeight;
+    private int          imgWidth, imgHeight;
 
     public ActivitiesAdapter(BaseActivity activity) {
         super(activity);
         baseActivity = activity;
         imgWidth = PixelUtils.getWindowWidth();
-        imgHeight =(int) (imgWidth / 1.4);
+        imgHeight = (int) (imgWidth / 1.4);
     }
 
-
     @Override
     public View getItemView(int position, View convertView, ViewGroup parent) {
         ViewHolder holder = null;
-        if(null != convertView) {
+        if (null != convertView) {
             holder = (ViewHolder) convertView.getTag();
         }
         if (null == holder) {
             holder = new ViewHolder();
             convertView = mInflater.inflate(R.layout.list_activities_item, null);
-            holder.bigImage = (ImageView) convertView.findViewById(R.id.bigImg);
-            holder.nameView = (TextView) convertView.findViewById(R.id.name);
-            holder.timeView = (TextView) convertView.findViewById(R.id.time);
-            holder.priceView = (TextView) convertView.findViewById(R.id.price);
-            holder.signBtn = (TextView) convertView.findViewById(R.id.sign);
-            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)holder.bigImage.getLayoutParams();
-            if(null == lp) {
-                lp = new LinearLayout.LayoutParams(imgWidth,imgHeight);
-            }else {
-                lp.width = imgWidth;
-                lp.height = imgHeight;
-            }
-            holder.bigImage.setLayoutParams(lp);
+            holder.bigImage = convertView.findViewById(R.id.bigImg);
+            holder.nameView = convertView.findViewById(R.id.name);
+            holder.timeView = convertView.findViewById(R.id.time);
+            holder.priceView = convertView.findViewById(R.id.price);
+            holder.signBtn = convertView.findViewById(R.id.sign);
             convertView.setTag(holder);
         }
 
@@ -61,24 +52,19 @@ public class ActivitiesAdapter extends CommonAdapter<ActivitiesInfo> {
         holder.priceView.setText("¥" + info.meprice);
         holder.signBtn.setText(info.signcount + "人已报名");
 
-        if(info.issigndate == 1) {
+        if (info.issigndate == 1) {
             holder.timeView.setText(info.beg + "  开始");
-            holder.priceView.setTextColor(baseActivity.getResources().getColor(R.color.pink));
-            holder.signBtn.setBackgroundResource(R.mipmap.btn_sign);
-        }else {
+        } else {
             holder.timeView.setText("已开始");
-            holder.priceView.setTextColor(baseActivity.getResources().getColor(R.color.gray));
-            holder.signBtn.setBackgroundResource(R.mipmap.btn_signed);
         }
-
         return convertView;
     }
 
     private class ViewHolder {
         ImageView bigImage;
-        TextView nameView;
-        TextView timeView;
-        TextView priceView;
-        TextView signBtn;
+        TextView  nameView;
+        TextView  timeView;
+        TextView  priceView;
+        TextView  signBtn;
     }
 }

+ 61 - 18
app/src/main/java/com/android/chmo/ui/fragment/home/ActivitiesFragment.java

@@ -1,22 +1,33 @@
 package com.android.chmo.ui.fragment.home;
 
+import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.AdapterView;
+import android.widget.ImageView;
 
 import com.android.chmo.R;
 import com.android.chmo.base.BaseFragment;
 import com.android.chmo.constant.Constants;
+import com.android.chmo.http.HttpApi;
 import com.android.chmo.http.RequestCallback;
 import com.android.chmo.http.response.ActivitiesListRes;
+import com.android.chmo.http.response.TopActivityRes;
 import com.android.chmo.http.service.ActivitiesService;
 import com.android.chmo.model.ActivitiesInfo;
+import com.android.chmo.ui.activity.WebViewActivity;
 import com.android.chmo.ui.activity.activities.ActivitiesDetailActivity;
 import com.android.chmo.ui.adpater.ActivitiesAdapter;
 import com.android.chmo.ui.view.EmptyView;
 import com.android.chmo.ui.view.RefreshListView;
+import com.android.chmo.utils.XUtilsImage;
 import com.google.gson.Gson;
+import com.youth.banner.Banner;
+import com.youth.banner.BannerConfig;
+import com.youth.banner.listener.OnBannerListener;
+import com.youth.banner.loader.ImageLoader;
 
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
@@ -31,18 +42,19 @@ import butterknife.BindView;
  * Created by Administrator on 2018/7/31.
  */
 
-public class ActivitiesFragment extends BaseFragment implements RefreshListView.RefreshListener{
+public class ActivitiesFragment extends BaseFragment implements RefreshListView.RefreshListener {
     @BindView(R.id.refreshList)
     RefreshListView refreshListView;
     @BindView(R.id.empty)
-    EmptyView emptyView;
+    EmptyView       emptyView;
 
-    private ActivitiesAdapter activitiesAdapter;
-
-    private int pageNo = 1;
-    private List<ActivitiesInfo> mList = new ArrayList<>();
-    private boolean isInit = false;
+    private ActivitiesAdapter                activitiesAdapter;
+    private Banner                           banner;
+    private List<TopActivityRes.TopActivity> topActivities;
 
+    private int                  pageNo = 1;
+    private List<ActivitiesInfo> mList  = new ArrayList<>();
+    private boolean              isInit = false;
 
 
     @Override
@@ -63,17 +75,33 @@ public class ActivitiesFragment extends BaseFragment implements RefreshListView.
         EventBus.getDefault().unregister(this);
     }
 
-
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(String event) {
-        if(event.equals("signChange")) {
+        if (event.equals("signChange")) {
             onRefresh();
         }
-    };
+    }
 
     @Override
     public void initView() {
         refreshListView.setRefreshListener(this);
+        View header = LayoutInflater.from(this.getActivity()).inflate(R.layout.header_activity, refreshListView.getListView(), false);
+        banner = header.findViewById(R.id.banner);
+        banner.setBannerStyle(BannerConfig.NOT_INDICATOR);
+        banner.setImageLoader(new ImageLoader() {
+            @Override
+            public void displayImage(Context context, Object path, ImageView imageView) {
+                XUtilsImage.display(imageView, HttpApi.getImgUrl(((TopActivityRes.TopActivity) path).Pic), ImageView.ScaleType.CENTER_CROP, R.mipmap.def_img2);
+            }
+        });
+        banner.setOnBannerListener(new OnBannerListener() {
+            @Override
+            public void OnBannerClick(int position) {
+                WebViewActivity.start(getActivity(), topActivities.get(position).url);
+            }
+        });
+        banner.start();
+        refreshListView.getListView().addHeaderView(header);
 
         activitiesAdapter = new ActivitiesAdapter(getBaseActivity());
         refreshListView.setAdapter(activitiesAdapter);
@@ -89,8 +117,8 @@ public class ActivitiesFragment extends BaseFragment implements RefreshListView.
 
     @Override
     public void onVisible() {
-        if(!isInit) {
-            if(refreshListView != null) {
+        if (!isInit) {
+            if (refreshListView != null) {
                 refreshListView.autoRefresh();
             }
             isInit = true;
@@ -113,29 +141,44 @@ public class ActivitiesFragment extends BaseFragment implements RefreshListView.
 
     }
 
+    private void loadActivities(final int page) {
+        if (page == 1) {
+            ActivitiesService.getTopActivities(new RequestCallback() {
+                @Override
+                public void onSuccess(String result) {
+                    TopActivityRes res = new Gson().fromJson(result, TopActivityRes.class);
+                    if ("success".equals(res.msg)) {
+                        topActivities = res.data;
+                        banner.update(res.data);
+                    }
+                }
 
+                @Override
+                public void onFailure(String error) {
 
-    private void loadActivities(final int page) {
+                }
+            });
+        }
         ActivitiesService.getActivityList(page, new RequestCallback() {
             @Override
             public void onSuccess(String result) {
                 refreshListView.finishRefresh();
                 ActivitiesListRes res = new Gson().fromJson(result, ActivitiesListRes.class);
-                if(res.data != null) {
-                    if(page == 1) {
+                if (res.data != null) {
+                    if (page == 1) {
                         mList.clear();
                     }
                     mList.addAll(res.data);
                     pageNo = page;
                     activitiesAdapter.setList(mList);
 
-                    if(res.data.size() == Constants.PAGE_SIZE) {
+                    if (res.data.size() == Constants.PAGE_SIZE) {
                         refreshListView.setEnableLoadMore(true);
-                    }else {
+                    } else {
                         refreshListView.setNoMoreData();
                     }
                 }
-                emptyView.setVisibility(mList.size() ==0 ? View.VISIBLE : View.GONE);
+                emptyView.setVisibility(mList.size() == 0 ? View.VISIBLE : View.GONE);
             }
 
             @Override

+ 56 - 0
app/src/main/java/com/android/chmo/ui/view/RoundImageView.java

@@ -0,0 +1,56 @@
+package com.android.chmo.ui.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+import com.android.chmo.R;
+
+public class RoundImageView extends android.support.v7.widget.AppCompatImageView {
+    float width, height;
+    int radius, radiusTopLeft, radiusTopRight, radiusBottomLeft, radiusBottomRight;
+
+    public RoundImageView(Context context) {
+        this(context, null);
+    }
+
+    public RoundImageView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView);
+        if (typedArray != null) {
+            radiusTopLeft = typedArray.getDimensionPixelOffset(R.styleable.RoundImageView_radius_top_left, 0);
+            radiusTopRight = typedArray.getDimensionPixelOffset(R.styleable.RoundImageView_radius_top_right, 0);
+            radiusBottomLeft = typedArray.getDimensionPixelOffset(R.styleable.RoundImageView_radius_bottom_left, 0);
+            radiusBottomRight = typedArray.getDimensionPixelOffset(R.styleable.RoundImageView_radius_bottom_right, 0);
+            radius = typedArray.getDimensionPixelOffset(R.styleable.RoundImageView_riv_radius, 0);
+            if (radius > 0) {
+                radiusTopLeft = radiusTopRight = radiusBottomLeft = radiusBottomRight = radius;
+            }
+            typedArray.recycle();
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        width = getWidth();
+        height = getHeight();
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        Path path = new Path();
+        float radii[] = {radiusTopLeft, radiusTopLeft, radiusTopRight, radiusTopRight, radiusBottomRight, radiusBottomRight, radiusBottomLeft, radiusBottomLeft};
+        path.addRoundRect(new RectF(0, 0, width, height), radii, Path.Direction.CCW);
+        canvas.clipPath(path);
+        super.onDraw(canvas);
+    }
+}

+ 5 - 0
app/src/main/res/drawable/bg_activity_item.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/white" />
+    <corners android:radius="8dp" />
+</shape>

+ 7 - 0
app/src/main/res/drawable/bg_activity_label_header.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F2F4F5" />
+    <corners
+        android:topLeftRadius="18dp"
+        android:topRightRadius="18dp" />
+</shape>

+ 8 - 0
app/src/main/res/drawable/bg_btn_apply.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#26FF4095" />
+    <corners android:radius="6dp" />
+    <stroke
+        android:width="1dp"
+        android:color="#ff4095" />
+</shape>

+ 33 - 0
app/src/main/res/layout/activity_web_view.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".ui.activity.WebViewActivity">
+
+    <com.android.chmo.ui.view.TopBar
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/white"
+        app:showBorder="true" />
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <WebView
+            android:id="@+id/webView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+        <ProgressBar
+            android:id="@+id/progressbar"
+            style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="2dp" />
+    </RelativeLayout>
+
+</LinearLayout>

+ 25 - 0
app/src/main/res/layout/header_activity.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="250dp">
+
+    <com.youth.banner.Banner
+        android:id="@+id/banner"
+        android:layout_width="match_parent"
+        android:layout_height="210dp"
+        android:background="#F2F4F5" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="57dp"
+        android:layout_alignParentBottom="true"
+        android:background="@drawable/bg_activity_label_header"
+        android:gravity="left|bottom"
+        android:paddingLeft="20dp"
+        android:paddingBottom="5dp"
+        android:text="活动列表"
+        android:textColor="@color/black"
+        android:textSize="22sp"
+        android:textStyle="bold" />
+
+</RelativeLayout>

+ 82 - 58
app/src/main/res/layout/list_activities_item.xml

@@ -1,73 +1,97 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
-    android:paddingBottom="8dp">
+    android:paddingLeft="14dp"
+    android:paddingTop="1dp"
+    android:paddingRight="14dp"
+    android:paddingBottom="1dp">
 
-    <ImageView
-        android:id="@+id/bigImg"
+    <com.dd.ShadowLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:scaleType="centerCrop"
-        android:src="@mipmap/def_img2" />
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@color/white"
-        android:orientation="vertical"
-        android:paddingTop="12dp"
-        android:paddingBottom="10dp"
-        android:paddingLeft="15dp"
-        android:paddingRight="15dp">
-
-        <TextView
-            android:id="@+id/name"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:maxLines="2"
-            android:text="活动标题"
-            android:textColor="@color/black"
-            android:textSize="16sp" />
+        app:sl_cornerRadius="8dp"
+        app:sl_dx="0dp"
+        app:sl_dy="2dp"
+        app:sl_shadowColor="#08000000"
+        app:sl_shadowRadius="6dp">
 
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:gravity="center_vertical"
-            android:layout_marginTop="12dp">
-            <TextView
-                android:id="@+id/time"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:text="2018-08-01 10:00 开始"
-                android:textColor="#999"
-                android:textSize="12sp" />
+            android:layout_height="match_parent"
+            android:background="@drawable/bg_activity_item"
+            android:clipChildren="false"
+            android:orientation="vertical">
 
+            <com.android.chmo.ui.view.RoundImageView
+                android:id="@+id/bigImg"
+                android:layout_width="match_parent"
+                android:layout_height="188dp"
+                android:scaleType="centerCrop"
+                android:src="@mipmap/def_img2"
+                app:radius_top_left="8dp"
+                app:radius_top_right="8dp" />
 
-            <TextView
-                android:id="@+id/price"
-                android:layout_width="wrap_content"
+            <LinearLayout
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginRight="10dp"
-                android:text="¥0"
-                android:textColor="@color/pink"
-                android:textSize="12sp" />
+                android:orientation="vertical"
+                android:paddingLeft="12dp"
+                android:paddingTop="10dp"
+                android:paddingRight="8dp"
+                android:paddingBottom="8dp">
 
-            <TextView
-                android:id="@+id/sign"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@mipmap/btn_sign"
-                android:paddingLeft="6dp"
-                android:paddingRight="6dp"
-                android:gravity="center"
-                android:textColor="@color/white"
-                android:textSize="12sp"
-                android:text="0人已报名"/>
-        </LinearLayout>
+                <TextView
+                    android:id="@+id/name"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:maxLines="2"
+                    android:text="活动标题"
+                    android:textColor="@color/black"
+                    android:textSize="15sp"
+                    android:textStyle="bold" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="2dp"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:id="@+id/time"
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="2018-08-01 10:00 开始"
+                        android:textColor="#666"
+                        android:textSize="12sp" />
 
-    </LinearLayout>
-</LinearLayout>
+
+                    <TextView
+                        android:id="@+id/price"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginRight="10dp"
+                        android:text="¥0"
+                        android:textColor="@color/pink"
+                        android:textSize="12sp" />
+
+                    <TextView
+                        android:id="@+id/sign"
+                        android:layout_width="80dp"
+                        android:layout_height="24dp"
+                        android:background="@drawable/bg_btn_apply"
+                        android:gravity="center"
+                        android:paddingLeft="6dp"
+                        android:paddingRight="6dp"
+                        android:text="0人已报名"
+                        android:textColor="#FF4095"
+                        android:textSize="12sp" />
+                </LinearLayout>
+            </LinearLayout>
+        </LinearLayout>
+    </com.dd.ShadowLayout>
+</FrameLayout>

+ 6 - 5
app/src/main/res/layout/page_activities.xml

@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="#eeeeee">
+    android:background="#F2F4F5"
+    android:orientation="vertical">
+
     <com.android.chmo.ui.view.EmptyView
         android:id="@+id/empty"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        app:empty="暂无活动"/>
+        app:empty="暂无活动" />
+
     <com.android.chmo.ui.view.RefreshListView
         android:id="@+id/refreshList"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    </com.android.chmo.ui.view.RefreshListView>
+        android:layout_height="match_parent"></com.android.chmo.ui.view.RefreshListView>
 </FrameLayout>

+ 2 - 0
app/src/main/res/layout/top_bar.xml

@@ -18,7 +18,9 @@
         android:layout_centerInParent="true"
         android:layout_marginLeft="@dimen/top_bar_height"
         android:layout_marginRight="@dimen/top_bar_height"
+        android:ellipsize="end"
         android:gravity="center"
+        android:lines="1"
         android:text=""
         android:textColor="@color/black"
         android:textSize="18sp"

二進制
app/src/main/res/mipmap-hdpi/icon_fenxiang.png


二進制
app/src/main/res/mipmap-xhdpi/icon_fenxiang.png


二進制
app/src/main/res/mipmap-xxhdpi/icon_fenxiang.png


二進制
app/src/main/res/mipmap-xxxhdpi/icon_fenxiang.png


+ 8 - 0
app/src/main/res/values/attrs.xml

@@ -14,4 +14,12 @@
         <attr name="image" format="integer" />
         <attr name="empty" format="string" />
     </declare-styleable>
+
+    <declare-styleable name="RoundImageView">
+        <attr name="riv_radius" format="dimension" />
+        <attr name="radius_top_left" format="dimension" />
+        <attr name="radius_top_right" format="dimension" />
+        <attr name="radius_bottom_left" format="dimension" />
+        <attr name="radius_bottom_right" format="dimension" />
+    </declare-styleable>
 </resources>