欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义控件+二维码

程序员文章站 2022-07-13 09:19:41
...

1.title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#D4DBED"
    >

    <TextView
        android:textSize="20sp"
        android:gravity="center"
        android:id="@+id/fh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"
        android:layout_weight="1"
        />

   <TextView
       android:textSize="25sp"
       android:gravity="center"
       android:id="@+id/titletv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="那些花儿"
       android:layout_weight="2"
       />


    <TextView
        android:textSize="20sp"
        android:gravity="center"
        android:id="@+id/tz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转"
        android:layout_weight="1"
        />
</LinearLayout>

2.自定义标题dytitle类

public class dytitle extends LinearLayout implements View.OnClickListener {

    private TextView fh;
    private TextView tz;
    private TextView titletv;
    private Return_Interface return_interface;
    public void setDytitle(Return_Interface return_interface){
        this.return_interface = return_interface;
    }
    public dytitle(Context context) {
        this(context,null);
    }

    public dytitle(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public dytitle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        View view = View.inflate(context, R.layout.title, this);
        fh = (TextView) view.findViewById(R.id.fh);
        tz = (TextView) view.findViewById(R.id.tz);
        titletv = (TextView) view.findViewById(R.id.titletv);
        fh.setOnClickListener(this);
        tz.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.fh:
                //return_interface.returnOnClick();
              // Intent intent2 = new Intent(getContext(), MainActivity.class);
               // getContext().startActivity(intent2);
                //view.getcontext().finish();.
                break;

            case R.id.tz:

                Intent intent = new Intent(getContext(), Main2Activity.class);
                getContext().startActivity(intent);

                break;



        }




    }
}

3.自定义圆环dyyh类

public class dyyh  extends View implements  Runnable  {

   /* Handler  handler =new Handler(){

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
         // Intent intent = new Intent(getContext(), CaptureActivity.class);
            //startActivityForResult(intent,1);
           }
    };*/

    Paint mpaint = new Paint();
    Paint mtvpaint = new Paint();
    Paint Mpaint = new Paint();

    private int progress=0;
    private RectF rectF;
    private boolean b = true;
    private  int  banjing=100;

    private Return_Interface return_interface;

    public void setReturn_interface(Return_Interface return_interface) {
        this.return_interface = return_interface;
    }

    public dyyh(Context context) {
        this(context,null);
    }

    public dyyh(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public dyyh(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);


        init();
        TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.dyyh, defStyleAttr, 0);
         banjing = typedArray.getInt(R.styleable.dyyh_dyyhradio,defStyleAttr);


    }


    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        int centerx=w/2;
        int centery=h/2;


        rectF = new RectF();
        rectF.left=centerx-banjing;
        rectF.top=centery-banjing;
        rectF.right=centerx+banjing;
        rectF.bottom=centery+banjing;


    }

    private void init() {
        mpaint.setColor(Color.parseColor("#00FE00"));
        mpaint.setStyle(Paint.Style.STROKE);
        mpaint.setStrokeWidth(20);


        Mpaint.setColor(Color.parseColor("#888888"));
        Mpaint.setStyle(Paint.Style.STROKE);
        Mpaint.setStrokeWidth(20);



        mtvpaint.setTextSize(25);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        huahuan(canvas);
        huatext(canvas);
    }

    private void huatext(Canvas canvas) {
        String  tv=progress+"%";

        Paint.FontMetrics fm = new Paint.FontMetrics();
        //得到文字的高度
        int tvh= (int) Math.ceil(fm.descent-fm.ascent);
        int tvw= (int) mtvpaint.measureText(tv,0,tv.length());

        canvas.drawText(tv,getWidth()/2-tvw/2,getHeight()/2-tvh/2,mtvpaint);

    }

    private void huahuan(Canvas canvas) {
        canvas.drawArc(rectF,-90,360,false,Mpaint);
        canvas.drawArc(rectF,-90,(360*progress)/100,false,mpaint);

    }


    @Override
    public void run() {

        while(true)
        {
            if(progress<100)
            {
                progress++;
                try {
                    Thread.sleep(100);
                    postInvalidate();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                b = false;
             }else{
                b = true;

                progress=0;
                return_interface.returnOnClick(b);
                break;
            }



             /*if(progress>=100)
             {

               try {
                     Thread.sleep(2000);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
                 Intent intent = new Intent(getContext(), Main2Activity.class);
                 getContext().startActivity(intent);


            }*/



        }





    }




   /* public void tz(final Return_Interface return_interface){
        return_interface.returnOnClick();
        return;
    }*/
}

4.自定义流式布局lsbj类

public class lsbj  extends ViewGroup{
    public lsbj(Context context) {
        this(context,null);
    }

    public lsbj(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

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

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //测量view
        measureChildren(widthMeasureSpec,heightMeasureSpec);
    }



    /**
     * 用来确定子View的位置
     * @param changed
     * @param l  lef 相对于父容器
     * @param t  top
     * @param r  right
     * @param b  bottom
     */


    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
         int  currentwidth=0;
         int  currentHeight=0;
        //得到子View的个数
        int  childcount=getChildCount();

        for(int i=0;i<childcount;i++)
        {
            //得到这个viewgroup里面的每一个子view
            View childView=getChildAt(i);


            //得到每一个子view的宽高
            int width=childView.getMeasuredWidth();
            int height=childView.getMeasuredHeight();

            //确定子view 的高度
           childView.layout(currentwidth,currentHeight,currentwidth+width,currentHeight+height);

            //累加所有的字view宽高
            currentwidth+=width;
            currentHeight+=height;






        }
}
}

5.自定义的接口Return_Interface

public interface Return_Interface {
        void returnOnClick(boolean b);
}

6.MainActivity

public class MainActivity extends AppCompatActivity{

    private dytitle dyt;
    private dyyh dyh;
    private TextView fh;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dyt = (dytitle) findViewById(R.id.dyt);
        dyh = (dyyh) findViewById(R.id.dyh);
        fh = (TextView) dyt.findViewById(R.id.fh);
        fh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
    public   void  sm(View v)
    {
        new Thread(dyh).start();
        dyh.setReturn_interface(new Return_Interface() {
            @Override
            public void returnOnClick(boolean b) {
                if(b){
                    Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                    startActivityForResult(intent,1);
                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            //处理扫描结果(在界面上显示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle == null) {
                    return;
                }
                if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String result = bundle.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

}

7.Main2Activity

public class Main2Activity extends AppCompatActivity {

    private dytitle dy_title;
    private TextView fh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        dy_title = (dytitle)findViewById(R.id.ddd);
        fh = (TextView)dy_title.findViewById(R.id.fh);
        fh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

8.activity_main

<com.example.zhoukao1mn.view.dytitle

       android:id="@+id/dyt"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">

   </com.example.zhoukao1mn.view.dytitle>


   <com.example.zhoukao1mn.view.dyyh
       aaa:dyyhradio="100"
       android:id="@+id/dyh"
       android:layout_width="match_parent"
       android:layout_height="261dp" />

<Button
    android:id="@+id/sm"
    android:onClick="sm"
    android:text="扫描二维码"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

9.activity_main2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.zhoukao1mn.Main2Activity"
    android:orientation="vertical"
    >


    <com.example.zhoukao1mn.view.dytitle
        android:id="@+id/ddd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </com.example.zhoukao1mn.view.dytitle>





    <com.example.zhoukao1mn.view.lsbj
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <TextView

            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:padding="5dp"
            android:background="#619EA0"
            />


        <TextView

            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:padding="5dp"
            android:background="#7561A0"
            />


        <TextView
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:padding="5dp"
            android:background="#9FA061"
            />
</com.example.zhoukao1mn.view.lsbj>
</LinearLayout>

10.二维码的依赖,权限app类见下一篇博客

自定义控件+二维码

相关标签: android