分类

在这里插入图片描述
依赖文件

 compile 'com.hjm:BottomTabBar:1.1.1'
    //okhttp
    api 'com.squareup.okhttp3:okhttp:3.12.1'

    api 'com.squareup.okhttp3:logging-interceptor:3.12.1'
    implementation 'com.google.code.gson:gson:2.8.5'
    //图片加载框架,glide

    implementation 'com.github.bumptech.glide:glide:3.7.0'

    //列表的展示
    api 'com.android.support:recyclerview-v7:28.0.0'

}
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '27.1.1'    //此处填写你项目使用的sdk版本
            }
        }
    }

activity_main2.xml

`?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
    tools:context=".activity.Main2Activity">

    <com.bawei.activity.crick
        android:id="@+id/rck"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>`

Main2Activity

package com.bawei.activity;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.bawei.R;

public class Main2Activity extends AppCompatActivity {
    crick rck;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        rck=findViewById(R.id.rck);
        float translationY = rck.getTranslationY();

        ObjectAnimator animator=ObjectAnimator.ofFloat(rck,"translationY",translationY,500,translationY);
        animator.setDuration(5000);
        //监听
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Intent intent=new Intent(Main2Activity.this,MainActivity.class);

                startActivity(intent);
                finish();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.start();

    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".activity.MainActivity">

    <com.hjm.bottomtabbar.BottomTabBar
        android:id="@+id/bottom_tab_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </com.hjm.bottomtabbar.BottomTabBar>

</android.support.constraint.ConstraintLayout>

MainActivity

package com.bawei.activity;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.bawei.R;
import com.bawei.fragments.Fragment1;
import com.bawei.fragments.Fragment2;
import com.bawei.fragments.Fragment3;
import com.bawei.fragments.Fragment4;
import com.hjm.bottomtabbar.BottomTabBar;

public class MainActivity extends FragmentActivity {
    private BottomTabBar mb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化组件
        mb=(BottomTabBar)findViewById(R.id.bottom_tab_bar);
        mb.init(getSupportFragmentManager())
                .setImgSize(150,150)
                .setFontSize(20)
                .setTabPadding(4,6,10)
                .setChangeColor(Color.RED,Color.DKGRAY)
                .addTabItem("首页",R.drawable.f, Fragment1.class)
                .addTabItem("分类",R.drawable.five, Fragment2.class)
                .addTabItem("购物车",R.drawable.h, Fragment3.class)
                .addTabItem("我的",R.drawable.t,Fragment4.class)
                .isShowDivider(false)
                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
                    @Override
                    public void onTabChange(int position, String name) {

                    }
                });
    }
}

crick

package com.bawei.activity;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

public class crick extends View {
    int view_w;
    int view_h;
    Paint paint=null ;
       int tag=0;
    public crick(Context context) {
        super(context);
    }

    public crick(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint=new Paint();
        paint.setColor(Color.WHITE);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        view_w=getMeasuredWidth();
        view_h=getMeasuredHeight();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Rect rect=new Rect();
        canvas.drawColor(Color.BLACK);
        canvas.drawCircle(view_w/2,view_h/2,200,paint);
        if (tag==0){
            invalidate();
        }

    }

}

left_item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="jjjj"
        android:lines="1"
        android:maxLength="4"
        android:textSize="24sp"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        />
</android.support.constraint.ConstraintLayout>

adpter类中的LeftAdapter

package com.bawei.adpter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.bawei.R;
import com.bawei.bean.UserBean;


import java.util.ArrayList;
import java.util.List;

public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.MyVh> {

    private Context context;
    private List<UserBean.ResultBean> list;

    public LeftAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<UserBean.ResultBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public MyVh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.left_item,parent,false);
        return new MyVh(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyVh holder, final int position) {
        holder.title.setText(list.get(position).name);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onclicklisener!=null){
                    onclicklisener.click(list.get(position).id);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyVh extends RecyclerView.ViewHolder {

        private final TextView title;

        public MyVh(View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
        }
    }
    private onclicklisener onclicklisener;
    public void setonItemClickLisener(onclicklisener onclicklisener){
        this.onclicklisener = onclicklisener;
    }

    public interface onclicklisener{
        void click(String cid);
    }

}

right_item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="30dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher"
        />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="dsdsad"
        android:lines="1"
        android:maxLength="3"
        app:layout_constraintTop_toBottomOf="@id/image"
        app:layout_constraintLeft_toLeftOf="@id/image"
        app:layout_constraintRight_toRightOf="@id/image"
        android:layout_marginTop="10dp"
        android:textSize="14sp"
        />

</android.support.constraint.ConstraintLayout>

RightAdapter

package com.bawei.adpter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.R;
import com.bawei.bean.RightBean;
import com.bumptech.glide.Glide;

import java.util.ArrayList;
import java.util.List;

public class RightAdapter extends RecyclerView.Adapter<RightAdapter.MyVh> {

    private Context context;
    private List<RightBean.ResultBean> list;

    public RightAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<RightBean.ResultBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public MyVh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.right_item,parent,false);
        return new MyVh(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyVh holder, int position) {
        holder.title.setText(list.get(position).name);
        Glide.with(context).load("http://365jia.cn/uploads/appletrecommend/201804/5ad6ba6c6bb8b.jpg").into(holder.imageView);
    }
//http://365jia.cn/uploads/appletrecommend/201804/5ad6ba6c6bb8b.jpg
    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyVh extends RecyclerView.ViewHolder {


        private final ImageView imageView;
        private final TextView title;

        public MyVh(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image);
            title = itemView.findViewById(R.id.title);
        }
    }
}

api类中的Api

package com.bawei.api;

public class Api {

    public static final String  url = "http://172.17.8.100/small/commodity/v1/findFirstCategory";

    public static final  String  url1 ="http://172.17.8.100/small/commodity/v1/findSecondCategory?firstCategoryId=";
}

bean类中的RightBean

package com.bawei.bean;

import java.util.List;

public class RightBean {


    public List<ResultBean> result;
    public static class ResultBean {
        public String id;
        public String name;
    }
}

UserBean

package com.bawei.bean;

import java.util.List;

public class UserBean {

    public List<ResultBean> result;

    public static class ResultBean {

        public String id;
        public String name;
    }
}

fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
    android:background="#0ff"
    android:orientation="horizontal"
>
        <android.support.v7.widget.RecyclerView
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="3"
            android:id="@+id/left_rv"/>

        <android.support.v7.widget.RecyclerView
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="7"
            android:id="@+id/right_rv"/>
    </LinearLayout>

fragments类中的Fragment1

package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;
import com.bawei.adpter.LeftAdapter;
import com.bawei.adpter.RightAdapter;
import com.bawei.bean.RightBean;
import com.bawei.bean.UserBean;
import com.bawei.view.ClsContart;
import com.bawei.presenter.ClsPresenter;
import com.google.gson.Gson;

import java.util.HashMap;

public class Fragment1 extends Fragment implements ClsContart.IClsView,LeftAdapter.onclicklisener {
    private RecyclerView mRightRv;
    private RecyclerView mLeftRv;
    private LeftAdapter leftAdapter;
    private RightAdapter rightAdapter;
    private ClsPresenter clsPresenter;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container, false);
        //找控件
        mRightRv = view.findViewById(R.id.right_rv);
        mLeftRv = view.findViewById(R.id.left_rv);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mLeftRv.setLayoutManager(new LinearLayoutManager(getActivity()));
        mRightRv.setLayoutManager(new GridLayoutManager(getActivity(), 2));
        leftAdapter = new LeftAdapter(getActivity());
        rightAdapter = new RightAdapter(getActivity());
        clsPresenter = new ClsPresenter(this);
        clsPresenter.ClsLeftList(new HashMap<String, String>());

    }

    private void getLeft(String cid) {
        HashMap<String, String> params = new HashMap<>();
        params.put("firstCategoryId", cid);
        clsPresenter.ClsRightList(params);
    }

    @Override
    public void LeftSuccess(String result) {
        UserBean userBean = new Gson().fromJson(result, UserBean.class);
        leftAdapter.setList(userBean.result);
        leftAdapter.setonItemClickLisener(this);
        mLeftRv.setAdapter(leftAdapter);
    }

    @Override
    public void LeftFailure(String msg) {

    }

    @Override
    public void RightSuccess(String result) {
        RightBean rightBean = new Gson().fromJson(result, RightBean.class);
        rightAdapter.setList(rightBean.result);
        mRightRv.setAdapter(rightAdapter);
    }

    @Override
    public void RightFailure(String msg) {

    }

    @Override
    public void click(String cid) {
        getLeft(cid);
    }
}

Fragment2

package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        return view;
    }
}

Fragment3

package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        return view;
    }
}

Fragment4


    package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        return view;
    }
}

model类中的ClsModel

package com.bawei.model;

import com.bawei.api.Api;
import com.bawei.view.ClsContart;

import com.bawei.net.OkHttpCallBack;
import com.bawei.net.OkHttpUtils;

import java.util.HashMap;
import java.util.Map;

public class ClsModel implements ClsContart.IClsModel {


    private String key;
    private String value;

    @Override
    public void ClsLeftList(HashMap<String, String> params, final IClsModelCallBack iClsModelCallBack) {
        OkHttpUtils.getInstance().doGet(Api.url, new OkHttpCallBack() {
            @Override
            public void Success(String result) {
                iClsModelCallBack.Success(result);
            }

            @Override
            public void failure(String msg) {
                iClsModelCallBack.Failure(msg);
            }
        });
    }

    @Override
    public void ClsRightList(HashMap<String, String> params, final IClsModelCallBack iClsModelCallBack) {
        for (Map.Entry<String, String> map: params.entrySet()) {
            key = map.getKey();
            value = map.getValue();
        }
        String s = Api.url1 + value;
        OkHttpUtils.getInstance().doGet(s, new OkHttpCallBack() {
            @Override
            public void Success(String result) {
                iClsModelCallBack.Success(result);
            }

            @Override
            public void failure(String msg) {
                iClsModelCallBack.Failure(msg);
            }
        });
    }

    public interface IClsModelCallBack{
        void Success(String result);
        void Failure(String msg);
    }
}

net类中的OkHttpCallBack

package com.bawei.net;

public interface OkHttpCallBack {

    void Success(String result);
    void failure(String msg);
}

OkHttpUtils

package com.bawei.net;

import android.os.Handler;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class OkHttpUtils {

    private static OkHttpUtils mInstance;
    private final OkHttpClient okHttpClient;
    private Handler handler = new Handler();
    public static OkHttpUtils getInstance() {
        if (mInstance==null){
            synchronized (OkHttpUtils.class){
                if (mInstance==null){
                    mInstance = new OkHttpUtils();
                }
            }
        }
        return mInstance;
    }

    private OkHttpUtils(){
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .writeTimeout(5,TimeUnit.SECONDS)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
    public void doGet(String url, final OkHttpCallBack okHttpCallback){

        Request build = new Request.Builder().url(url).get().build();

        okHttpClient.newCall(build).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        okHttpCallback.failure("网络异常");
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if (response.code()==200){
                    final String string = response.body().string();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            okHttpCallback.Success(string);
                        }
                    });
                }
            }
        });
    }
    public void dopost(String url, HashMap<String,String> params, final OkHttpCallBack callBack){
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String,String> map:params.entrySet()) {
            builder.add(map.getKey(),map.getValue());
        }
        RequestBody requestBody = builder.build();
        Request request = new Request.Builder().url(url).post(requestBody).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if (callBack!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.failure("网络请求失败");
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (callBack!=null){
                    if (response.code()==200){
                        final String result = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                            callBack.Success(result);
                            }
                        });
                    }
                }
            }
        });
    }
}

presenter类中的ClsPresenter

package com.bawei.presenter;

import com.bawei.view.ClsContart;

import com.bawei.model.ClsModel;

import java.util.HashMap;

public class ClsPresenter extends ClsContart.IClsPresenter {

    private ClsContart.IClsView iClsView;
    private ClsModel clsModel;

    public ClsPresenter(ClsContart.IClsView iClsView) {
        this.iClsView = iClsView;
        clsModel = new ClsModel();
    }

    @Override
    public void ClsLeftList(HashMap<String, String> params) {
        clsModel.ClsLeftList(params, new ClsModel.IClsModelCallBack() {
            @Override
            public void Success(String result) {
                iClsView.LeftSuccess(result);
            }

            @Override
            public void Failure(String msg) {
                iClsView.LeftFailure(msg);
            }
        });
    }

    @Override
    public void ClsRightList(HashMap<String, String> params) {
        clsModel.ClsRightList(params, new ClsModel.IClsModelCallBack() {
            @Override
            public void Success(String result) {
                iClsView.RightSuccess(result);
            }

            @Override
            public void Failure(String msg) {
                iClsView.RightFailure(msg);
            }
        });
    }
}

view类中的ClsContart

package com.bawei.view;


import com.bawei.model.ClsModel;

import java.util.HashMap;

public interface ClsContart {

    public abstract class IClsPresenter{
        public abstract void ClsLeftList(HashMap<String,String> params);
        public abstract void ClsRightList(HashMap<String,String> params);
    }


    interface IClsModel{
        void ClsLeftList(HashMap<String, String> params, ClsModel.IClsModelCallBack iClsModelCallBack);
        void ClsRightList(HashMap<String, String> params, ClsModel.IClsModelCallBack iClsModelCallBack);
    }

    interface IClsView{
        void LeftSuccess(String result);
        void LeftFailure(String msg);
        void RightSuccess(String result);
        void RightFailure(String msg);
    }
}

PullLayout

package com.bawei.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;

public class PullLayout extends LinearLayout {
    private int mchildMaxHeight;
    private int mHSpace = 20;
    private int mVSpace = 20;

    public PullLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //得到父容器的宽高
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int heigh = MeasureSpec.getSize(heightMeasureSpec);

        measureChildren(widthMeasureSpec,heightMeasureSpec);

        //测量子孩子的宽高
        fingMaxChildHeigh();
        int left = 0,top = 0;
        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            View view = getChildAt(i);
            if (left != 0){
                if ((left + view.getMeasuredWidth())>width){
                    top += mchildMaxHeight + mHSpace;
                    left = 0;
                }
            }
            left += view.getMeasuredWidth()+mHSpace;
        }
        setMeasuredDimension(width,(top+mchildMaxHeight)>heigh ? heigh :top +mchildMaxHeight);

    }

    private void fingMaxChildHeigh() {
        mchildMaxHeight = 0;
        //得到子孩子的数量
        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            View view = getChildAt(i);
            if (view.getMeasuredHeight() > mchildMaxHeight){
                mchildMaxHeight = view.getMeasuredHeight();
            }
        }
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        fingMaxChildHeigh();
        int left = 0,top = 0;
        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            View view = getChildAt(i);
            if (left != 0){
                if ((left + view.getMeasuredWidth())>getWidth()){
                    top += mchildMaxHeight + mVSpace;
                    left = 0;
                }
            }
            view.layout(left,top,left+view.getMeasuredWidth(),top+mchildMaxHeight);;
            left += view.getMeasuredWidth()+mHSpace;
        }
    }
}

权限

<uses-permission android:name="android.permission.INTERNET" />

values文件下的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
</resources>

dimens.xml

<resources>
    <dimen name="fab_margin">16dp</dimen>
</resources>

strings.xml

<resources>
    <string name="app_name">zhoukao2_lixie</string>
    <string name="title_activity_main2">Main2Activity</string>
</resources>

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

drawable下的bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="10dp"/>
    <solid android:color="#33dddddd" />
    <stroke android:color="#ddd" android:width="1dp"/>
</shape>

circle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="10dp"/>
    <stroke android:width="1dp" android:color="#000"/>
</shape>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值