自定义View绘制圆形实现触发事件(单指移动,多指缩放)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.view_exercise.MainActivity" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"/>
    <com.example.view_exercise.MyView 
        android:id="@+id/myview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</RelativeLayout>
package com.example.view_exercise;

import android.content.Context;
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;

public class MyView extends View{
     private Paint paint;
     private float x=200;
     private float y=200;
     private float hand_x,hand_y;
     private float r;
     private float radius=5;
     private float x_s_old;
     private float y_s_old;
     private float x_s_new;
     private float y_s_new;
     private float old=0;
     private float ne1=0;
     private float round=50;  




    public MyView(Context context, AttributeSet attrs, int defStyleAttr){
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
        paint=new Paint();
//      paint.setTextSize(25f);
    }


    public MyView(Context context, AttributeSet attrs){
//      super(context, attrs);
        this(context, attrs, 0);
    }


    public MyView(Context context){
//      super(context);
        this(context, null);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);


        canvas.drawARGB(255, 255, 100, 100);

        //绘制实心圆
        paint.setColor(Color.GREEN);
        canvas.drawCircle(x, y, round, paint);


        //绘制字
        /*paint.setColor(Color.BLUE);
        canvas.drawText("我们都是好孩子", 100, 200, paint);*/



        /*paint.setColor(Color.BLUE);
        canvas.drawLine(10, 230, 60, 230, paint);*/
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
           switch (event.getPointerCount()) {
            case 1:
                switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN:

                    break;

                case MotionEvent.ACTION_MOVE:

                        float x_t=event.getX();
                        float y_t=event.getY();   
                        float t=(x_t-x)*(x_t-x)+(y_t-y)*(y_t-y);

                        float sqrt = (float) Math.sqrt(t);
                        if(sqrt<=50){
                            x=event.getX();
                            y=event.getY();
                            invalidate();
                        }

                break;

                case MotionEvent.ACTION_UP:


                 break;
                }
            break;

            case 2:
                switch (event.getAction()&event.ACTION_MASK){
                case MotionEvent.ACTION_POINTER_DOWN:                       
                    x_s_old=event.getX(0)-event.getX(1);
                    y_s_old=event.getY(0)-event.getY(1);
                    old=(float) Math.sqrt(x_s_old*x_s_old+y_s_old*y_s_old);
                    break;                               
                case MotionEvent.ACTION_MOVE:                   
                    x_s_new=event.getX(event.getPointerId(0))-event.getX(event.getPointerId(1));    
                    y_s_new=event.getY(event.getPointerId(0))-event.getY(event.getPointerId(1));
                    ne1=(float) Math.sqrt(x_s_new*x_s_new+y_s_new*y_s_new);

                    if(ne1>old){
                        float side=round+3;       
                        round=side;
                        round=side;
                        Log.i("aaa", round+"");
                    }else if(ne1<old){
                        float side=round-3;   
                        round=side;

//                      round=(float) (round*1.01);
                     }
                        invalidate();
                    break;

                case MotionEvent.ACTION_UP:


                    break;
                }

        break;
        }
        return true;
    }







    //计算屏幕
    /*@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
        // TODO Auto-generated method stub
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(400,600);
    }*/







    //触摸事件
/*  @Override
    public boolean onTouchEvent(MotionEvent event){
        // TODO Auto-generated method stub      
        switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:

            break;
        case MotionEvent.ACTION_MOVE:           
            //获取触摸点的个数
            int count=event.getPointerCount();  
            switch (count){
            case 1:
                hand_x=event.getX();
                hand_y=event.getY();    
                r=(float) Math.sqrt((hand_x-x)*(hand_x-x)+(hand_y-y)*(hand_y-y));
                if(r<50){       
                    x=event.getX();
                    y=event.getY();
                    //全部刷新(重绘)
                    invalidate();
                }
                break;
            case 2:
                float x1=event.getX(0);
                float y1=event.getY(0);
                float x2=event.getX(1);
                float y2=event.getY(1);
                float d=(float) Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
                radius=(float)d/2;
                invalidate();
                break;
            default:
                break;
            }
            if(count==1){
            OneTouch(event);
            }else if(count==2){
                float x1=event.getX(0);
                float y1=event.getY(0);
                float x2=event.getX(1);
                float y2=event.getY(1);
                float d=(float) Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
                r=(float)d/2;
                invalidate();
            }
            break;
        case MotionEvent.ACTION_UP:

            break;
        default:

            break;      
        }
        //一定要返回true
        return true;
    }
*/  

    /*private void OneTouch(MotionEvent event){
        hand_x=event.getX();
        hand_y=event.getY();    
        r=(float) Math.sqrt((hand_x-x)*(hand_x-x)+(hand_y-y)*(hand_y-y));
        if(r<50){       
            x=event.getX();
            y=event.getY();
            //全部刷新(重绘)
            invalidate();
        }
    }*/
    //确定布局
  /*    @Override
        protected void onLayout(boolean changed, int left, int top, int right,
                int bottom){
            // TODO Auto-generated method stub
            super.onLayout(changed, 50,50,50,50);
        }*/
}
package com.example.view_exercise;

import com.bwei.view_exercise.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //引用自定义布局
//        setContentView(new MyView(this));

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值