android中实现自定义view中图形的缩放

来源:互联网 发布:厦门网络文化节 编辑:程序博客网 时间:2024/06/05 07:51
package com.example.drawview;


import java.util.Currency;


import android.content.Context;
import android.graphics.AvoidXfermode.Mode;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;




/**
 * 
 * 自定义view类,,实现自定义view
 * @author 浅议爱
 *
 */
public class MyView extends View{

//定义画笔
public Paint paint;

public float my_x=200;
public float my_y=200;


public int width;


public int height;
float my_ra = 50;//半径
public float mCurrentRate = 1;
public float mOldRate = 1;
public boolean mIsFirst;
public float mOriginalLength;
public float mCurrentLength;


public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
paint=new Paint();

}


public MyView(Context context, AttributeSet attrs) {
// super(context, attrs);
// TODO Auto-generated constructor stub
this(context, attrs, 0);

}


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

}
    

//定义画画方法
@Override
public void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// canvas.drawText("我是武小鹏", 100,100, paint);
//画一个圆,第三个代表圆的半径
// canvas.drawCircle(cx, cy, radius, paint);
paint.setColor(Color.RED);
canvas.drawCircle(my_x, my_y, my_ra, paint);
// zoom(canvas);


// //画一条线
// canvas.drawLine(0.0f, 0.0f, 100.0f, 100.0f, paint);
// //自定义圆,扇形
// RectF rectF=new RectF(100, 30, 300, 100);
// canvas.drawArc(rectF, 0, 360, false, paint);
}



//定义触摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:

break;
case MotionEvent.ACTION_MOVE:
int count=event.getPointerCount();
switch (count) {
case 1:
//当手指移动的时候,,圆跟着手指移动,重新绘制圆
Log.i("TAG", "X坐标="+event.getRawX()+"Y坐标="+event.getRawY());
//获取点击的坐标
float ev_x=event.getX();  
float ev_y=event.getY();

float x=ev_x-my_x;    
float y=ev_y-my_y;     
//判断是否在圆上点击,,,,
//如果是一,支持滑动
if (Math.sqrt(x*x+y*y)<=50) {
my_x=event.getX();
   my_y=event.getY();
  invalidate();//刷新
}
break;
case 2:
//计算两手之间的距离
 float disX = Math.abs(event.getX(0) - event.getX(1));
 float disY = Math.abs(event.getY(0) - event.getY(1));
 //两手之间的距离就是圆的直径
 double sqrt = Math.sqrt(disX * disX + disY * disY);
 //计算圆的半径,重新刷新数据
 my_ra=(float) sqrt/2;
 invalidate();
 break;
}
case MotionEvent.ACTION_UP:
mOldRate = mCurrentRate;
mIsFirst = true;
break;
}
return true;


}


//设置自定义布局的大小
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//调用该方法。。设置自定义布局的宽和高
// setMeasuredDimension(400, 400);
}
//设置自定义布局的位置
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
// TODO Auto-generated method stub
super.onLayout(changed, left, top, right, bottom);
DisplayMetrics metrics = new DisplayMetrics();
//
//         // 得到布局的宽和高
// int width = getMeasuredWidth();
// int height = getMeasuredHeight();
// metrics = getResources().getDisplayMetrics();
// int screenWidth = metrics.widthPixels; // 屏幕宽(像素,如:480px)
// int screenHeight = metrics.heightPixels; // 屏幕高(像素,如:800px)
// int x = (screenWidth - width) / 2;
// int y = (screenHeight - height) / 2;
// int z = screenHeight/2-(screenHeight/2-height/2);
// setX(x);
// setY(z);



}
}
0 0
原创粉丝点击