自定义View-Myview

来源:互联网 发布:已备案域名 编辑:程序博客网 时间:2024/06/04 19:19

自定义控件知识点:


MyView:

package com.ruru.myview.view;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import com.ruru.myview.R;/** * Created by 27c1 on 2016/11/29. */public class MyView extends View {    private static final String TAG = "view";    private int height;    private Paint paint;    private int x;    private int y;    public MyView(Context context) {        super(context);        init();    }    public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        //自定义属性的声明和获取        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView, 0, 0);        height = array.getDimensionPixelSize(R.styleable.MyView_height, 20);        int width = array.getDimensionPixelSize(R.styleable.MyView_width, 30);        String text = array.getString(R.styleable.MyView_text);        Log.i(TAG, "MyView: "+width+"-"+ height +"-"+text);        //初始化视图        init();    }    private void init() {//设置画笔        paint = new Paint();        x = 0;        y = 0;        paint.setColor(Color.RED);//设置画笔颜色        paint.setStrokeWidth(30);//设置画笔宽度    }    @Override    public void draw(Canvas canvas) {        super.draw(canvas);//        canvas.drawArc();//        canvas.drawLine(0,0,getWidth(),height,paint);//        canvas.drawText("你好",getWidth()/2,height/2,paint);//        Bitmap bitmap = BitmapFactory.decodeStream(getResources().openRawResource(R.raw.a));//        canvas.drawBitmap(bitmap,getWidth()/2-bitmap.getWidth()/2,0,paint);        //如果下面高度写的是height的话那么高度就是Myview里边的30dp        //如果高度是getHeight()那么就是整个高度        canvas.drawText("文字移动",x,y,paint);//宽度记得除以2否则会被挤出去    }    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                break;            case MotionEvent.ACTION_MOVE:                x= (int) event.getX();                y= (int) event.getY();                invalidate();//此方法 是重新触发 draw方法                break;            case MotionEvent.ACTION_UP:                break;        }        return true;//下面这个一定要改为return true;    }}
MainActivity:

package com.ruru.myview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.ruru.myview.view.MyView;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyView(this));    }}
res-values-attrs:

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="MyView">        <attr name="width" format="dimension"></attr>        <attr name="height" format="dimension"></attr>        <attr name="text" format="string"></attr>    </declare-styleable></resources>




0 0
原创粉丝点击