自定義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);
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章