xrecyclerView

//梯形变化

package com.xm1.ykmoni;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private int i = 0;
    private int widthPixels;
    private int heightPixels;
    private Tixing tixing;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.jia).setOnClickListener(this);

        tixing = findViewById(R.id.tixing01);
        //DisplayMetrics获取屏幕宽高
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        //赋值
        widthPixels = displayMetrics.widthPixels;
        heightPixels = displayMetrics.heightPixels;
    }

    //点击添加
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.jia:
                final TextView textView = new TextView(MainActivity.this);
                textView.setText("" + i);
                textView.setHeight(heightPixels / 30);
                //宽为屏幕宽度的三分之一
                textView.setWidth(widthPixels / 3);
                //根据数值展示不同的数据
                if (i % 3 == 0) {
                    textView.setBackgroundColor(Color.RED);
                } else if (i % 3 == 1) {
                    textView.setBackgroundColor(Color.GREEN);
                } else {
                    textView.setBackgroundColor(Color.BLUE);
                }
                tixing.addView(textView);
                pydonghua(textView);
                //长按条目删除
                textView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        donghua(v, (TextView) v);
                        return true;
                    }
                });
                //点击跳转
                textView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        TextView v1 = (TextView) v;
                        String s = v1.getText().toString();
                        int nums = Integer.parseInt(s);
                        Bundle bundle = new Bundle();
                        bundle.putInt("num", nums);
                        Intent intent = new Intent(MainActivity.this, NewsActivity.class);
                        intent.putExtras(bundle);
                        startActivity(intent);
                    }
                });
                i++;
                break;
        }
    }

    //添加动画
    private void pydonghua(View v) {
        //平移
        ObjectAnimator translationX = ObjectAnimator.ofFloat(v, "translationX", -800, 0);
        //动画时间
        translationX.setDuration(1000);
        //执行动画
        translationX.start();
    }

    //删除动画
    private void donghua(View v, final TextView textView) {
        //透明
        ObjectAnimator alpha = ObjectAnimator.ofFloat(v, "alpha", new float[]{1f, 0});
        alpha.setDuration(2000);
        alpha.start();
        alpha.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                tixing.removeView(textView);
            }
        });
    }
}
package com.xm1.ykmoni;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by  on 2018-05-30.
 */

public class Tixing extends ViewGroup{

    private int measuredWidth;

    public Tixing(Context context) {
        super(context);
    }

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

    public Tixing(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        measuredWidth = getMeasuredWidth();
        //测量子View的宽高,只有ViewFroup中有这个方法,直接继承自View是没有这个方法的
        measureChildren(widthMeasureSpec,heightMeasureSpec);

    }

    @Override
    protected void onLayout(boolean b, int i, int i1, int i2, int i3) {

        //拿到子控件的个数
        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();
                startWidth += v.getMeasuredWidth();
                //判断,当控件宽度大于或等于屏幕宽度时控件宽度归零
            if (startWidth>=measuredWidth) {
                startWidth=0;
            }

        }
    }
}

//xrecyclerview

package com.xm1.ykmoni;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.widget.Toast;

import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.xm1.ykmoni.adapter.XrvAdapter;
import com.xm1.ykmoni.bean.News;
import com.xm1.ykmoni.db.NewsDao;
import com.xm1.ykmoni.util.NetUtil;
import com.xm1.ykmoni.util.OkHttpUtils;

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

public class NewsActivity extends AppCompatActivity {

    private XRecyclerView news_xrv;
    private int pages = 0;
    private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=" + (5010 + pages);
    private OkHttpUtils okHttpUtils;
    private int operType = 0;
    private List<News.DataBean> lists = new ArrayList<>();
    private XrvAdapter xrvAdapter;
    private NewsDao newsDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news);
        Bundle bundle = getIntent().getExtras();
        int num = bundle.getInt("num");
        pages=num;
        url="http://ttpc.dftoutiao.com/jsonpc/refresh?type=" + (5010 + pages);
        okHttpUtils = OkHttpUtils.getOkHttpUtils();
        newsDao = new NewsDao(this);
        initView();
        initXrv();
        requestNetData();
    }

    private void requestNetData() {
        if (NetUtil.isConn(this)) {
            okHttpUtils.getJson(url, new OkHttpUtils.MOkHttp() {
                @Override
                public void onResponse(String json) {
                    //处理json串得到合法的json                    String s = getJsonByString(json);
                    //如果是第一页的数据就存入
                    if (pages==0){
                        newsDao.addData(url, s);
                    }
                    //json解析并展示数据
                    showData(s);
                }
            });
        } else {
            Toast.makeText(NewsActivity.this, "当前无网络,请联网重试", Toast.LENGTH_SHORT).show();
            //没有网,根据url查询数据库
            String s = newsDao.queryData(url);
            //未缓存的url不进行解析展示
            if (!s.isEmpty()) {
                showData(s);
            }

        }

    }

    private String getJsonByString(String json) {
        String s1 = json.substring(5);
        String s2 = s1.substring(0, s1.length() - 1);
        return s2;
    }

    private void showData(String s) {
        Gson gson = new Gson();
        News news = gson.fromJson(s, News.class);
        List<News.DataBean> data = news.getData();
        if (operType == 0) {
            lists.clear();
        }
        lists.addAll(data);
        setAdapter();
    }

    private void setAdapter() {
        if (xrvAdapter == null) {
            xrvAdapter = new XrvAdapter(NewsActivity.this, lists);
            news_xrv.setAdapter(xrvAdapter);
        } else {
            xrvAdapter.notifyDataSetChanged();
        }
        //条目删除
        xrvAdapter.setOnItemClickListener(new XrvAdapter.OnItemClickListener() {
            @Override
            public void removeItem(final int position) {
//                Toast.makeText(NewsActivity.this, "点击了" + position, Toast.LENGTH_SHORT).show();
                AlertDialog.Builder builder = new AlertDialog.Builder(NewsActivity.this);
                builder.setTitle("删除");
                builder.setMessage("是否删除?");
                builder.setPositiveButton("", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        lists.remove(position);
//                        xrvAdapter.notifyItemRemoved(position);
//                        xrvAdapter.notifyItemRangeChanged(position,lists.size()-position);
                        xrvAdapter.notifyDataSetChanged();
                     //删除同时根据url
                    }
                });
                builder.setNegativeButton("", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(NewsActivity.this, "取消了", Toast.LENGTH_SHORT).show();
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.show();
            }
        });
    }

    private void initXrv() {
        news_xrv.setPullRefreshEnabled(true);
        news_xrv.setLoadingMoreEnabled(true);
        news_xrv.addItemDecoration(new SimpleDividerDecoration(this));
        news_xrv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        news_xrv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                pages = 0;
                operType = 0;
                url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=" + (5010 + pages);
                requestNetData();
                news_xrv.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                operType = 1;
                pages++;
                url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=" + (5010 + pages);
                requestNetData();
                news_xrv.loadMoreComplete();
            }
        });
    }

    private void initView() {
        news_xrv = (XRecyclerView) findViewById(R.id.news_xrv);
    }
}
package com.xm1.ykmoni.adapter;

import android.content.Context;
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.xm1.ykmoni.R;
import com.xm1.ykmoni.bean.News;

import java.util.List;

/**
 * author:Created by YangYong on 2018/5/30 0030.
 */

public class XrvAdapter extends RecyclerView.Adapter {
    private Context context;
    private List<News.DataBean> list;
    private final DisplayImageOptions options;
    private View view2;
    private View view1;
    private ThreeViewHolder holder2;
    private OneViewHolder holder1;


    public XrvAdapter(Context context, List<News.DataBean> list) {
        this.context = context;
        this.list = list;
        options = new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .build();
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        if (viewType == 1) {
            view2 = View.inflate(context, R.layout.item2, null);
            holder2 = new ThreeViewHolder(view2);
            return holder2;
        } else {
            view1 = View.inflate(context, R.layout.item1, null);
            holder1 = new OneViewHolder(view1);
            return holder1;
        }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
//        Log.d("old",position+"");
//        int position1 = holder.getLayoutPosition();
//        Log.d("new",position+"");
        News.DataBean bean = list.get(position);
        if (holder instanceof OneViewHolder) {
            holder1 = (OneViewHolder) holder;
            holder1.item1_title.setText(bean.getBrief());
            String src = bean.getMiniimg().get(0).getSrc();
            ImageLoader.getInstance().displayImage(src, holder1.item1_img, options);
        } else {
            holder2 = (ThreeViewHolder) holder;
            holder2.item2_title.setText(bean.getBrief());
            String s1 = bean.getMiniimg().get(0).getSrc();
            String s2 = bean.getMiniimg().get(1).getSrc();
            String s3 = bean.getMiniimg().get(2).getSrc();
            ImageLoader.getInstance().displayImage(s1, holder2.item2_img1, options);
            ImageLoader.getInstance().displayImage(s2, holder2.item2_img2, options);
            ImageLoader.getInstance().displayImage(s3, holder2.item2_img3, options);

        }
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (onItemClickListener != null) {
//                    int layoutPosition = holder.getLayoutPosition();
                    onItemClickListener.removeItem(position);
                }
                return true;
            }
        });
    }

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

    @Override
    public int getItemViewType(int position) {
        int size = list.get(position).getMiniimg().size();
        if (size == 3) {
            return 1;
        } else {
            return 0;
        }
    }

    class OneViewHolder extends RecyclerView.ViewHolder {

        private final TextView item1_title;
        private final ImageView item1_img;

        public OneViewHolder(View itemView) {
            super(itemView);
            item1_title = view1.findViewById(R.id.item1_title);
            item1_img = view1.findViewById(R.id.item1_img);


        }
    }

    class ThreeViewHolder extends RecyclerView.ViewHolder {

        private final TextView item2_title;
        private final ImageView item2_img1;
        private final ImageView item2_img2;
        private final ImageView item2_img3;

        public ThreeViewHolder(View itemView) {
            super(itemView);
            item2_title = view2.findViewById(R.id.item2_title);
            item2_img1 = view2.findViewById(R.id.item2_img1);
            item2_img2 = view2.findViewById(R.id.item2_img2);
            item2_img3 = view2.findViewById(R.id.item2_img3);
        }
    }

    //定义接口
    public interface OnItemClickListener {
        void removeItem(int position);
    }

    private OnItemClickListener onItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }
}
public class NetUtil {
    public static boolean isConn(Context context){
        boolean bisConnFlag=false;
        ConnectivityManager conManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo network = conManager.getActiveNetworkInfo();
        if(network!=null){
            bisConnFlag=conManager.getActiveNetworkInfo().isAvailable();
        }
        return bisConnFlag;
    }
}

//ok封装

package com.xm1.ykmoni.util;

import android.os.Handler;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * author:Created by YangYong on 2018/5/29 0029.
 * 单例模式,接口,handlder
 */

public class OkHttpUtils {

    private static OkHttpClient httpClient;
    private static Handler handler;
    private static OkHttpUtils okHttpUtils = null;
    private static MOkHttp mOkHttp;
    private static ImageOkHttp imageOkHttp;

    //构造方法
    private OkHttpUtils() {
        httpClient = new OkHttpClient.Builder().build();
        handler = new Handler();
    }

    //提供get方法
    public static OkHttpUtils getOkHttpUtils() {
        if (okHttpUtils == null) {
            okHttpUtils = new OkHttpUtils();
        }
        return okHttpUtils;
    }

    //定义接口,将请求到的json串传递出去
    public interface MOkHttp {
        void onResponse(String json);
    }

    //请求图片
    public interface ImageOkHttp {
        void onResponse(byte[] bytes);
    }


    //使用handler,使接口调用发生在主线程
    private static void runUi(final String json) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (mOkHttp != null) {
                    mOkHttp.onResponse(json);
                }
            }
        });
    }

    //重写,处理bitmap
    private void runUi(final byte[] bytes) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (imageOkHttp != null) {
                    imageOkHttp.onResponse(bytes);
                }
            }
        });
    }

    //请求数据的公共方法
    public void getJson(String url, MOkHttp mOkHttp) {
        this.mOkHttp = mOkHttp;
        Request request = new Request.Builder().url(url).build();
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                //请求成功时调用定义好的方法,切换线程
                runUi(string);
            }
        });
    }

    //请求网络,获得bitmap数据
    public void getBitmap(String url, ImageOkHttp imageOkHttp) {
        this.imageOkHttp = imageOkHttp;
        Request request = new Request.Builder().url(url).build();
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                byte[] bytes = response.body().bytes();
//                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                //请求成功时调用定义好的方法,切换线程
                runUi(bytes);
            }
        });
    }


}

//数据库

package com.xm1.ykmoni.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * author:Created by YangYong on 2018/5/31 0031.
 */

public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context, "mydb", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table news (id integer primary key autoincrement,path text,jsondata text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
package com.xm1.ykmoni.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

/**
 * author:Created by YangYong on 2018/5/31 0031.
 */

public class NewsDao {
    private MyHelper myHelper;
    private SQLiteDatabase db;

    public NewsDao(Context context) {
        myHelper = new MyHelper(context);
        db = myHelper.getWritableDatabase();
    }

    public void addData(String url, String data) {
        //先进行删除
        db.delete("news", " path=?", new String[]{url});

        ContentValues contentValues = new ContentValues();
        contentValues.put("path", url);
        contentValues.put("jsondata", data);

        //进行插入
        long rows = db.insert("news", null, contentValues);
    }

    public String queryData(String url) {
        String json = "";
        //得到一个可读可写的数据库
//        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.query("news", null, " path=?", new String[]{url}, null, null, null);

        while (cursor.moveToNext()) {
            json = cursor.getString(cursor.getColumnIndex("jsondata"));
        }
        return json;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值