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);
}
}
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
- android中实现自定义view中图形的缩放
- Android中使用自定义View实现shape图形绘制
- android 中 图形缩放
- android自定义View实现图片的绘制、旋转、缩放
- 通过手势实现Android自定义View的缩放
- Viewpager中嵌入自定义可缩放view遇到的问题
- Viewpager中嵌入自定义可缩放view遇到的问题
- Android中图形的绘制-----自定义View(利用canvas和Path相结合)
- 自定义View实现图片的缩放
- android 自定义view实现图形移动
- Android 中自定义 view
- Android中自定义View
- android中自定义View
- Android中自定义View
- Android中自定义View
- Android中自定义View
- Android中自定义view
- android中自定义View
- 指针对象数组的析构问题
- [DevExpress]控件之GridLookupedit的运用
- [poj 1191] 棋盘分割 划分型DP
- 各位爸爸妈妈,你们懂得
- 字符串整理 1
- android中实现自定义view中图形的缩放
- mvc,mvp,mvvm比较及区别(1)
- leetcode 237. Delete Node in a Linked List
- 使用jsoup完成模拟登陆
- Matlab与C/C++混合编程接口应用总结
- delphi socket客户端连接服务端时的错误
- PHP PDO ACCESS 留言板-数据库设计
- 动态规划之0-1背包问题
- python 新手入门学习(一)