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);



}
}

更多相关文章

  1. Android(安卓)动态设置布局文件的exception
  2. android WebView 使用实例
  3. 动态生成控件
  4. 实现RadioButton多行多列排列布局
  5. 多条柱状图图
  6. 定义界面布局TextView&Button
  7. Android(安卓)Studio用线性布局和相对布局做一个简单的登陆界面
  8. android wearOs开发
  9. Android布局 屏幕滚动方法 ScrollView

随机推荐

  1. mysql下mysqladmin日常管理命令总结(必看
  2. Mysql慢查询操作梳理总结
  3. MySQL修改root密码的多种方法(推荐)
  4. 完美解决mysql客户端授权后连接失败的问
  5. mysqldump备份数据库时排除某些库的实例
  6. mysql完整备份时过滤掉某些库的方法
  7. Mysql数据库之Binlog日志使用总结(必看篇
  8. MySQL修改默认存储引擎的实现方法
  9. Mysql更换MyISAM存储引擎为Innodb的操作
  10. MACOS中忘记MySQL root密码的解决方案