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



}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章