自定义VIEW 实现梯形布局+XRecyclerView上下拉
梯形布局
public class LadderView extends ViewGroup { public LadderView(Context context) { this(context,null); } public LadderView(Context context, AttributeSet attrs) { this(context, attrs,0); } public LadderView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr,0); } public LadderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureChildren(widthMeasureSpec,heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount=getChildCount(); int startHeight=0; int startWidth=0; //屏幕的宽 Resources resources = this.getResources(); DisplayMetrics dm = resources.getDisplayMetrics(); int width = dm.widthPixels; //摆放控件 for(int a=0;a<childCount;a++){ View childAt = getChildAt(a); //设置每个控件的边距 childAt.layout(startWidth, startHeight, startWidth + childAt.getMeasuredWidth(), startHeight + childAt.getMeasuredHeight()); startHeight += childAt.getMeasuredHeight(); startWidth += childAt.getMeasuredWidth(); //判断 当屏幕的剩余宽度不够放置一个控件的时候,折行 if(width-startWidth<childAt.getMeasuredWidth()){ startWidth=0; } //点击事件 点击跳转 final int finalI = a; childAt.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { TextView textView = (TextView) view; Log.e("xxxxxxx",textView.getText().toString()+""); Intent intent = new Intent(getContext(),SecActivity.class); intent.putExtra("id",textView.getText().toString()); getContext().startActivity(intent); } }); //长按删除 childAt.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(getContext(), finalI +":长按位置", Toast.LENGTH_SHORT).show(); removeView(view); return true; } }); } } }
public class MainActivity extends AppCompatActivity { private Button btn; private LadderView ladderView; private int tvnum=0; private int pwidth; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); drawView(); } /** * 初始化控件 */ private void initView() { btn = findViewById(R.id.view_btn); ladderView = findViewById(R.id.ladderView); } /** * 绘制布局 */ private void drawView() { //获取屏幕宽度 Display display = getWindowManager().getDefaultDisplay(); // 为获取屏幕宽、高 pwidth = display.getWidth(); //点击添加TextView btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tvnum++; ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); textView = new TextView(MainActivity.this); //设置颜色 if (tvnum % 3 == 1) { textView.setBackgroundColor(Color.RED); } else if (tvnum % 3 == 2) { textView.setBackgroundColor(Color.YELLOW); } else { textView.setBackgroundColor(Color.BLUE); } //设置属性 textView.setText(tvnum+""); textView.setTextColor(Color.BLACK); textView.setTextSize(40); textView.setGravity(Gravity.CENTER); //设置控件宽度为屏幕的1/3 lp.width=pwidth/3; textView.setLayoutParams(lp); ladderView.addView(textView); //设置属性动画 ObjectAnimator translationX = ObjectAnimator.ofFloat(textView, "translationX", (pwidth - pwidth / 3), 0); translationX.setDuration(1000); translationX.start(); } }); } }
XRecyclerview
public class NewsModle { private OkHttpUtils okHttpUtils; private Dao dao; public void getData(String type, final INewsModle iNewsModle) { dao = new Dao(App.getAppContext()); if (NetStateUtil.getNetType(App.getAppContext())!=-1){ okHttpUtils = OkHttpUtils.getInstance(App.getAppContext()); HashMap<String, String> params = new HashMap<>(); params.put("type", type); okHttpUtils.post(Constants.GET_URL, params, new OkHttpUtils.ICallback() { @Override public void getData(String result) { if (!TextUtils.isEmpty(result)) { String s = result.replace("null(", "") .replace(")", ""); Gson gson = new Gson(); NewsBean newsBean = gson.fromJson(s, NewsBean.class); iNewsModle.success(newsBean); dao.insert("type", s); } } }); } else { Toast.makeText(App.getAppContext(), "没有网络啦", Toast.LENGTH_SHORT).show(); String quers = dao.quers(); Log.e("quers",quers+""); Gson gson = new Gson(); NewsBean newsBean = gson.fromJson(quers, NewsBean.class); iNewsModle.success(newsBean); } } public interface INewsModle { void success(NewsBean newsBean); } }
public class SecActivity extends AppCompatActivity implements INewsView{ private XRecyclerView xrlv; private NewsPresenter newsPresenter; private int type=5010; private boolean isRefresh=true; private NewsAdapter newsAdapter; String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sec); initView(); initData(); } private void initData() { Intent intent = getIntent(); String id = intent.getStringExtra("id"); int i = Integer.parseInt(id); url=type+i+""; newsPresenter = new NewsPresenter(this); newsPresenter.getNews(url); } private void initView() { xrlv = findViewById(R.id.xrlv); //设置局部刷新动画 xrlv.setItemAnimator(new DefaultItemAnimator()); //下拉刷新 xrlv.setPullRefreshEnabled(true); //上拉加载 xrlv.setLoadingMoreEnabled(true); xrlv.setLayoutManager(new LinearLayoutManager(this)); xrlv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { newsPresenter.getNews(type+""); xrlv.refreshComplete(); } @Override public void onLoadMore() { type++; newsPresenter.getNews(type+""); xrlv.loadMoreComplete(); } }); } @Override public void success(NewsBean newsBean) { newsAdapter = new NewsAdapter(newsBean.getData(), this); if(isRefresh){ xrlv.setAdapter(newsAdapter); xrlv.refreshComplete(); }else{ if(newsAdapter !=null){ } xrlv.loadMoreComplete(); } } }
public class NewsAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> { private List<NewsBean.DataBean> list; private Context context; public NewsAdapter(List<NewsBean.DataBean> list, Context context) { this.list = list; this.context = context; } @Override public XRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType== Constants.TYPE1){ View view = LayoutInflater.from(context).inflate(R.layout.item1, parent, false); return new Type1HolderView(view); }else{ View view2 = LayoutInflater.from(context).inflate(R.layout.item2, parent, false); return new Type2HolderView(view2); } } @Override public void onBindViewHolder(final XRecyclerView.ViewHolder holder, int position) { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage("确定删除吗?"); builder.setTitle("删除"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int pos = holder.getLayoutPosition();//得到下标 list.remove(pos-1); notifyItemRemoved(pos);//局部删除当前view并局部刷新 } }); builder.setNegativeButton("取消",null); builder.show(); return true; } }); NewsBean.DataBean dataBean = list.get(position); if (holder instanceof Type1HolderView) {//1张图片 ((Type1HolderView) holder).title.setText(dataBean.getTopic()); Glide.with(context).load(dataBean.getMiniimg().get(0).getSrc()).into(((Type1HolderView) holder).image); } else if (holder instanceof Type2HolderView) {//三张图片 ((Type2HolderView) holder).title.setText(dataBean.getTopic()); Glide.with(context).load(dataBean.getMiniimg().get(0).getSrc()).into(((Type2HolderView) holder).image1); Glide.with(context).load(dataBean.getMiniimg02().get(0).getSrc()).into(((Type2HolderView) holder).image2); Glide.with(context).load(dataBean.getLbimg().get(0).getSrc()).into(((Type2HolderView) holder).image3); } } @Override public int getItemViewType(int position) { return position % 3 == 2 ? Constants.TYPE1 : Constants.TYPE2; } @Override public int getItemCount() { return list.size(); } class Type1HolderView extends RecyclerView.ViewHolder { private TextView title; private ImageView image; public Type1HolderView(View itemView) { super(itemView); image = itemView.findViewById(R.id.img1); title = itemView.findViewById(R.id.title1); } } class Type2HolderView extends RecyclerView.ViewHolder { private TextView title; private ImageView image1; private ImageView image2; private ImageView image3; public Type2HolderView(View itemView) { super(itemView); image1 = itemView.findViewById(R.id.img1); title = itemView.findViewById(R.id.title3); image2 = itemView.findViewById(R.id.img2); image3 = itemView.findViewById(R.id.img3); } } }