自定义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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值