okhttp依赖:implementation 'com.squareup.okhttp3:okhttp:3.10.0'
RecyclerView依赖:
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
权限:
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
activity_main:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="com.example.com.yuekaomoni.MainActivity"> <Button android:layout_width="450dp" android:layout_height="wrap_content" android:text="三角梯" android:background="#f9f5f9"/> <Button android:layout_width="40dp" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:id="@+id/but_add" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="+" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.com.yuekaomoni.MyViewGroup android:layout_width="match_parent" android:layout_marginTop="80dp" android:id="@+id/mygroup" android:layout_height="wrap_content"> <!-- <TextView android:layout_width="155dp" android:layout_height="40dp" android:id="@+id/tv1" android:background="#f00" /> <TextView android:layout_width="158dp" android:layout_height="40dp" android:id="@+id/tv2" android:background="#171818" /> <TextView android:layout_width="158dp" android:layout_height="40dp" android:id="@+id/tv3" android:background="#0033ff" /> <TextView android:layout_width="158dp" android:layout_height="40dp" android:id="@+id/tv4" android:background="#f00" /> <TextView android:layout_width="158dp" android:layout_height="40dp" android:id="@+id/tv5" android:background="#171818" /> <TextView android:layout_width="158dp" android:layout_height="40dp" android:id="@+id/tv6" android:background="#0033ff" /> --> </com.example.com.yuekaomoni.MyViewGroup> </LinearLayout> <!-- <com.example.com.yuekaomoni.MyViewGroup android:layout_width="match_parent" android:layout_marginTop="200dp" android:id="@+id/mygroup1" android:layout_height="wrap_content"> <TextView android:layout_width="150dp" android:layout_height="40dp" android:background="#f00" /> <TextView android:layout_width="150dp" android:layout_height="40dp" android:background="#02fac0" /> <TextView android:layout_width="150dp" android:layout_height="40dp" android:background="#0033ff" /> </com.example.com.yuekaomoni.MyViewGroup>--> </RelativeLayout>
mainActivity:
package com.example.com.yuekaomoni; import android.animation.ObjectAnimator; import android.content.Intent; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextWatcher; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private int i=0; private Button but_add; private int num=1; private MyViewGroup mygroup; private TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getinit(); } private void getinit() { but_add = findViewById(R.id.but_add); but_add.setOnClickListener(this); mygroup = findViewById(R.id.mygroup); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.but_add: i++; final TextView textView = new TextView(this); textView.setText("条目"+i); textView.setHeight(55); textView.setWidth(220); if (i%3==1){ textView.setBackgroundColor(Color.RED); }else if(i%3==2) { textView.setBackgroundColor(Color.BLACK); }else { textView.setBackgroundColor(Color.BLUE); } mygroup.addView(textView); float curTranslationX = textView.getTranslationX(); ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationX", curTranslationX, 500f, curTranslationX); animator.setDuration(5000); animator.start(); textView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { mygroup.removeView(textView); return true; } }); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,Second.class)); } }); break; } } } XRecycleView依赖:compile 'com.jcodecraeer:xrecyclerview:1.3.2'
<?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="com.example.com.yuekaomoni.Second"> <!-- <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv"></android.support.v7.widget.RecyclerView>--> <com.jcodecraeer.xrecyclerview.XRecyclerView android:layout_width="match_parent" android:id="@+id/rv" android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView> <!--<com.wuxiaolong.pullloadmorerecyclerview.PullLoadMoreRecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" />--> </LinearLayout> 第二个页面:
package com.example.com.yuekaomoni; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.util.Log; import android.widget.Toast; import com.google.gson.Gson; import com.jcodecraeer.xrecyclerview.XRecyclerView; import com.wuxiaolong.pullloadmorerecyclerview.PullLoadMoreRecyclerView; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class Second extends AppCompatActivity { private XRecyclerView rv; private MyRecycleViewAdapter myRecycleViewAdapter; private List<Reqbean.ResultBean.DataBean> list=new ArrayList<Reqbean.ResultBean.DataBean>(); private int page=0; private boolean isRefresh = true;//判断是下啦刷新还是上啦加载 private String urldata="http://v.juhe.cn/toutiao/index?type=top&key=444da40ec8ee43818073d7131c2ffa8f&page="+page; private int type; private jsonshujudao jsonshujudao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); getinit(); getdata(); getdata(); getinits(); } private void getdata() { if (NetStateUtil.isConn(Second.this)) { okhttputil.doGet(urldata, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Gson gson = new Gson(); String string = response.body().string(); Reqbean reqbean = gson.fromJson(string, Reqbean.class); jsonshujudao.inserdata("aa",string); final List<Reqbean.ResultBean.DataBean> data = reqbean.getResult().getData(); runOnUiThread(new Runnable() { @Override public void run() { myRecycleViewAdapter = new MyRecycleViewAdapter(Second.this, data); rv.setAdapter(myRecycleViewAdapter); } }); } }); }else { Log.d("zzz","无网络,查询数据库中的数据"); Toast.makeText(Second.this,"没有网络,稍后重试",Toast.LENGTH_SHORT).show(); String querydata = jsonshujudao.querydata("aa"); Toast.makeText(this, querydata, Toast.LENGTH_SHORT).show(); Log.i("aa", "getdata: "+querydata); } } private void getinits() { rv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { //当下拉刷新的时候,重新获取数据,所有curr要变回0,并且把集合list清空 page=0; list.clear(); getdata(); rv.refreshComplete(); } @Override public void onLoadMore() { page=page+5; getdata(); rv.refreshComplete(); } }); /* rv.setOnPullLoadMoreListener(new PullLoadMoreRecyclerView.PullLoadMoreListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { isRefresh = true; page=1; type =1; getdata(); rv.setPullLoadMoreCompleted(); } },1500); } @Override public void onLoadMore() { new Handler().postDelayed(new Runnable() { @Override public void run() { type=2; isRefresh = false; page++; getdata(); rv.setPullLoadMoreCompleted(); } },1500); } }); }*/ } private void getinit() { rv = findViewById(R.id.rv); jsonshujudao = new jsonshujudao(this); /* rv.setPullLoadMoreCompleted(); rv.setFooterViewText("loading"); rv.setColorSchemeResources(android.R.color.holo_red_dark,android.R.color.holo_blue_dark); rv.setPullRefreshEnable(true); rv.setPushRefreshEnable(true);*/ //布局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); rv.setLayoutManager(linearLayoutManager); // rv.setLinearLayout(); } }自定义ViewGroup:
package com.example.com.yuekaomoni; import android.content.Context; import android.graphics.Color; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.HashSet; /** * Created by 联想 on 2018/5/30. */ public class MyViewGroup extends ViewGroup { private HashSet mDatas; public MyViewGroup(Context context) { super(context); } public MyViewGroup(Context context, AttributeSet attrs) { super(context, attrs); } public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onLayout(boolean b, int i, int i1, int i2, int i3) { } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //测量子View的宽高,只有ViewFroup中有这个方法,直接继承自View是没有这个方法的 measureChildren(widthMeasureSpec, heightMeasureSpec); //拿到子控件的个数 int childCount = getChildCount(); //定义一个临时高度 int startHeight=0; int startWidth=0; //循环遍历出每一个View for(int a=0;a<childCount;a++){ View v = getChildAt(a); //给每一个view设置自己的位置 上 右 下 左 v.layout(startWidth,startHeight,startWidth+v.getMeasuredWidth(),startHeight+v.getMeasuredHeight()); startHeight+=v.getMeasuredHeight(); if ((a+1)%3==0){ startWidth=0; }else { startWidth+=v.getMeasuredWidth(); } } /* String rightButtonText = "+"; if (!TextUtils.isEmpty(rightButtonText)) { titleBarRight.setText(rightButtonText); //设置左边按钮文字颜色 int leftButtonTextColor = attributes.getColor(R.styleable.CustomTitleBar_right_button_text_color, Color.WHITE); titleBarRight.setTextColor(leftButtonTextColor); }*/ } /* public void removeAllViews(int i) { if(i != mDatas.size()){ } }*/ }适配器:
package com.example.com.yuekaomoni; import android.content.Context; import android.graphics.Bitmap; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import java.util.List; /** * Created by 联想 on 2018/5/30. */ class MyRecycleViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static final int TYPE_ONE=0; public static final int TYPE_TWO=1; private ViewHolder holder; private ViewHolder1 holder1; private DisplayImageOptions options; Context context; List<Reqbean.ResultBean.DataBean> data; public MyRecycleViewAdapter(Context context, List<Reqbean.ResultBean.DataBean> data) { this.context = context; this.data = data; options = new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时 .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式 1px=2字节 .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式 .displayer(new RoundedBitmapDisplayer(100))//设置圆角 30代表半径 自定义 .build(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType==TYPE_ONE){ View view=View.inflate(context,R.layout.view,null); holder = new ViewHolder(view); return holder; }else { View view1=View.inflate(context,R.layout.view1,null); holder1 = new ViewHolder1(view1); return holder1; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof ViewHolder){ ((ViewHolder) holder).text.setText(data.get(position).getTitle()); ImageLoader.getInstance().displayImage(data.get(position).getThumbnail_pic_s(),((ViewHolder) holder).image,options); } if (holder instanceof ViewHolder1){ ((ViewHolder1) holder1).text1.setText(data.get(position).getAuthor_name()); ImageLoader.getInstance().displayImage(data.get(position).getThumbnail_pic_s(),holder1.imgv1,options); ImageLoader.getInstance().displayImage(data.get(position).getThumbnail_pic_s02(),holder1.imgv2,options); ImageLoader.getInstance().displayImage(data.get(position).getThumbnail_pic_s03(),holder1.imgv3,options); } } @Override public int getItemCount() { return data.size(); } @Override public int getItemViewType(int position) { if (position%2==0){ return TYPE_ONE; }else { return TYPE_TWO; } } class ViewHolder extends RecyclerView.ViewHolder{ private final ImageView image; private final TextView text; public ViewHolder(View itemView) { super(itemView); image = itemView.findViewById(R.id.img); text = itemView.findViewById(R.id.tv); } } class ViewHolder1 extends RecyclerView.ViewHolder{ private final ImageView imgv1; private final ImageView imgv2; private final ImageView imgv3; private final TextView text1; public ViewHolder1(View itemView) { super(itemView); text1 = itemView.findViewById(R.id.tv1); imgv1 = itemView.findViewById(R.id.imgv1); imgv2 = itemView.findViewById(R.id.imgv2); imgv3 = itemView.findViewById(R.id.imgv3); } } } 多条目控件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <ImageView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/a"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:text="fdsfdsfds"/> </LinearLayout>控件2:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_marginTop="10dp" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:id="@+id/imgv1" android:layout_width="80dp" android:layout_weight="0" android:layout_height="80dp" /> <ImageView android:id="@+id/imgv2" android:layout_width="80dp" android:layout_weight="0" android:layout_height="80dp" /> <ImageView android:id="@+id/imgv3" android:layout_width="80dp" android:layout_weight="0" android:layout_height="80dp" /> </LinearLayout> </LinearLayout>