重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先给大家展示下效果图,如果大家感觉不错,请参考实现代码
在市南等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站建设 网站设计制作定制网站制作,公司网站建设,企业网站建设,高端网站设计,成都营销网站建设,外贸营销网站建设,市南网站建设费用合理。
效果图如下所示:
代码如下所示:
public class MainActivity extends Activity { View view; public static final int DRAG = 1; public static final int SCALE = 2; int mode = 1; int height = 10, width = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); view = findViewById(R.id.view); } float length = 1; // 重写 @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); // 多指触控 switch (event.getAction() & event.getActionMasked()) { case MotionEvent.ACTION_DOWN: mode = DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: Log.e("TAG", "多指移动"); mode = SCALE; // 两个手指开始的长度是多少呢? length = calc(event); break; case MotionEvent.ACTION_UP: length = 1; break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { // 1. 单个手指 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( width, height); params.setMargins(x, y, 0, 0); view.setLayoutParams(params); } else { // 2. 两个手指 float beilv = calc(event) / length; width = (int) (view.getWidth() * beilv); height = (int) (view.getHeight() * beilv); Log.e("TAG", beilv + " " + width + " " + height); FrameLayout.LayoutParams params = (LayoutParams) view .getLayoutParams(); params.width = width; params.height = height; view.setLayoutParams(params); } break; } return true; } // 类 Ponint public float calc(MotionEvent event) { float x1 = event.getX(); float y1 = event.getY(); float x2 = event.getX(1); float y2 = event.getY(1); return (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } }
xml类
自己在shape中定义的一个圆的oval.xml
<?xml version="1.0" encoding="utf-8"?>
用自定义View的方式实现单点触控时拖动图片,跟着拖动点走
QiuView 类
public class QiuView extends View { Paint paint = new Paint(); PointF point = new PointF(); public QiuView(Context context) { super(context); paint.setColor(Color.RED); paint.setAntiAlias(true); paint.setDither(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(point.x, point.y, 50, paint); } // 触摸事件 @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { point.set(event.getX(), event.getY()); invalidate(); } return true; } }
总结
以上所述是小编给大家介绍的Android自定义一个图形单点移动缩小的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对创新互联网站的支持!