android中實現自定義view中圖形的縮放
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);
}
}
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);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.