依赖文件
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>