自定义View

 水波图

package com.bawei.yk.custom;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

/**
 * @Author: zhang
 * @Date: 2019/4/6 20:27
 * @Description:
 */
public class MyView extends View {
    Paint paint = new Paint();
    Path path = new Path();
    float mx;
    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        paint.setColor(Color.RED);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        path.reset();
        path.moveTo(getLeft(),getBottom());
        float v= (float) (Math.PI/getRight());
        mx -= 0.1f;
        for (int i = 0; i <= getRight(); i++) {
            float v1 = (float) (60 * Math.sin(v * i + mx) + 100);
            path.lineTo(i,v1);
        }
        path.lineTo(getRight(),getBottom());
        canvas.drawPath(path,paint);
        postInvalidateDelayed(1);
    }
}
/**
 * @Author: zhang
 * @Date: 2019/3/21 9:00
 * @Description:
 */
public class MyView extends View {
    Paint paint;
    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
        //设置颜色
        paint.setColor(Color.RED);
        //抗锯齿
        paint.setAntiAlias(true);
        //填充
        paint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //canvas.drawCircle(100,100,100,paint);
        RectF rectF = new RectF(0,0,200,200);
        canvas.clipRect(rectF);
        canvas.drawRect(rectF,paint);
    }
}
流式布局
public class LoginActivity extends AppCompatActivity implements MyInterface.ViewInterface.LoginInterface {

    List<ShopBean.ResultBean> list = new ArrayList<>();
    MyInterface.PresenterInterface presenterInterface;
    XRecyclerView xRecyclerView;
    MyAdapter adapter;
    int page = 1;
    String key = "高";
    MyLineLayout myLineLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        presenterInterface = new MyPresenter(this);
        init();
    }

    private void init()  {
        xRecyclerView = findViewById(R.id.xRecycler_id);
        myLineLayout = findViewById(R.id.myLineLayout);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        xRecyclerView.setLayoutManager(layoutManager);
        adapter = new MyAdapter(list,this);
        xRecyclerView.setAdapter(adapter);
        Log.i("tag","V"+key);
        presenterInterface.toModel(key,page);
        xRecyclerView.setLoadingMoreEnabled(true);
        xRecyclerView.setPullRefreshEnabled(true);
        xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                list.clear();
                page = 1;
                presenterInterface.toModel(key,page);
                xRecyclerView.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                page++;
                presenterInterface.toModel(key,page);
                xRecyclerView.loadMoreComplete();
            }
        });
    }

    @Override
    public void reFreDisplay(List<ShopBean.ResultBean> vList) {

        list.addAll(vList);
        Log.i("tag","个数"+list.size());
        adapter.notifyDataSetChanged();
    }


}
**
 * @Author: zhang
 * @Date: 2019/3/22 10:01
 * @Description:自定义控件
 */
public class MyLineLayout extends LinearLayout {
    TextView back,search;
    EditText edie_key;
    LoginActivity activity;
    FlowLayout flowLayout;
    LinearLayout linearLayout;
    public MyLineLayout(Context context) {
        super(context);
    }

    public MyLineLayout(final Context context, AttributeSet attrs) {
        super(context, attrs);
        activity = (LoginActivity) context;
        View view = LayoutInflater.from(context).inflate(R.layout.layout_kongjian,this);
        back = view.findViewById(R.id.finish_id);
        search = view.findViewById(R.id.search_id);
        edie_key = view.findViewById(R.id.edit_key);
        linearLayout = view.findViewById(R.id.linear_id);
        flowLayout = view.findViewById(R.id.flowLayout_id);
        back.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(activity,"1111",Toast.LENGTH_SHORT).show();

            }
        });
        edie_key.clearFocus();
        edie_key.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                edie_key.requestFocus();
            }
        });
        edie_key.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus){
                    flowLayout.setVisibility(VISIBLE);
                }else {
                    flowLayout.setVisibility(GONE);
                }
            }
        });
        search.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                edie_key.clearFocus();
                String key = edie_key.getText().toString();
                final TextView textView = new TextView(context);
                textView.setTag(key);
                textView.setText(key);
                textView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.e("tag" ,"点击的内容 = " + textView.getTag().toString());
                    }
                });
                flowLayout.addView(textView);
                flowLayout.requestLayout();
                Log.i("tag",""+key);


                activity.list.clear();
                activity.key = key;
                activity.presenterInterface.toModel(key,activity.page);
            }
        });
    }

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

 

流式布局
public class FlowLayout extends ViewGroup {
    int mMarginLeft = 20;
    int mMarginTop = 20;
    public FlowLayout(Context context) {
        super(context);
    }

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

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        measureChildren(widthMeasureSpec,heightMeasureSpec);
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        setMeasuredDimension(width,height);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int left = mMarginLeft;
        int top = mMarginTop;
        for (int i = 0; i <getChildCount() ; i++) {
            int measuredWidth = getChildAt(i).getMeasuredWidth();
            int measuredHeight = getChildAt(i).getMeasuredHeight();
            if (measuredHeight+left+mMarginLeft > getWidth()){
                left = mMarginLeft;
                top += measuredHeight + mMarginTop;
                getChildAt(i).layout(left,top,left+measuredWidth,top+measuredHeight);
            }else {
                getChildAt(i).layout(left,top,left+measuredWidth,top+measuredHeight);
            }
            left += mMarginLeft+measuredWidth;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}
public class MainActivity extends AppCompatActivity {

    MyView myView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        myView = findViewById(R.id.myView_id);
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();
        int height = wm.getDefaultDisplay().getHeight();
        ObjectAnimator translationX = ObjectAnimator.ofFloat(myView, "translationX", 1, width-200, width-200);
        ObjectAnimator translationY = ObjectAnimator.ofFloat(myView, "translationY", 1, height-200, height-200);
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.play(translationX).with(translationY);
        animatorSet.setDuration(3000).start();
        //动画监听
        animatorSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                //动画执行结束
                Intent intent = new Intent(MainActivity.this,ViewActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值