Android自定义一个图形单点移动缩小的效果

先给大家展示下效果图,如果大家感觉不错,请参考实现代码

效果图如下所示:

代码如下所示:

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类

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.lesson6_work1.MainActivity" > <View android:id="@+id/view" android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/oval" /> </FrameLayout>

自己在shape中定义的一个圆的oval.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@android:color/holo_red_dark"/> </shape>

用自定义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自定义一个图形单点移动缩小的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-24 12:43:40

Android自定义一个图形单点移动缩小的效果的相关文章

Android自定义View实现简单的圆形Progress效果_Android

先给大家展示下效果图,如果感觉不错,请参考实现思路: 我们要实现一个自定义的再一个圆形中绘制一个弧形的自定义View,思路是这样的: 先要创建一个类ProgressView,继承自View类,然后重写其中的两个构造方法,一个是一个参数的,一个是两个参数的,因为我们要在xml文件中使用该自定义控件,所以必须要定义这个两个参数的构造函数.创建完了这个类后,我们先不去管它,先考虑我们实现的这个自定义View,我们想让它的哪些部分可以由使用者自己指定,比如说这个Demo中我们让他的外面圆的外边框颜色和宽

Android自定义View实现loading动画加载效果

项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. 先自定义一个View,继承自LinearLayout,在Layout中,添加布局控件 /** * Created by xiedong on 2017/3/7. */ public class Loading_view extends LinearLayout { private Context m

Android 自定义闪屏页广告倒计时view效果

如今APP越来越多,我们每天所使用的的软件也越来越多,可是在我们不付费的情况下,App制造商如何实现,实现收入甚至是盈利呢?答案就是在我们打开软件所必须经过的地方穿插广告,当然为了顾及用户的感受,一般都会以倒计时的形式展示给用户,用户可以选择跳过.可能是因为自己的强迫症,总想着是怎么做的,自己就尝试了一下,分享给大家的同时,顺便加深自己的理解.效果如图: 1.为了满足产品和设计,先搞几个自定义属性 1)内层背景 2)数字的颜色 3)外层圆环宽度 4)文字大小 5)外层圆环颜色 6)圆的半径 这里

Android 自定义view实现进度条加载效果实例代码

这个其实很简单,思路是这样的,就是拿view的宽度,除以点的点的宽度+二个点 之间的间距,就可以算出大概能画出几个点出来,然后就通过canvas画出点,再然后就是每隔多少时间把上面移动的点不断的去改变它的坐标就可以, 效果如下: 分析图: 代码如下: package com.example.dotloadview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bit

Android自定义Dialog实现文字动态加载效果_Android

之前在技术问答上面看到一个提问 "加载中-" 后面三个点是动态的,这么一个效果实现.想来想去,好像没想到好的处理方式. 尝试了一下,以一个最笨的方式实现了.先来看一下效果 : 我是通过自定义一个Dialog,加载中的效果,是在Dialog内部实现的,进度还是从Activity里面控制的. 下面是Dialog实现类: public class CustomDialog extends AlertDialog { public CustomDialog(Context context) {

Android自定义View实现竖直跑马灯效果案例解析_Android

首先给出跑马灯效果图   中间的色块是因为视频转成GIF造成的失真,自动忽略哈. 大家知道,横向的跑马灯android自带的TextView就可以实现,详情请百度[Android跑马灯效果].但是竖直的跑马灯效果原生Android是不支持的.网上也有很多网友实现了自定义的效果,但是我一贯是不喜欢看别人的代码,所以这篇博客的思路完全是我自己的想法哈.  首先,我们需要给自定义的控件梳理一下格局,如下图所示:  1.首先我们将控件分为三个区块,上面绿色部分为消失不可见的块,中间黑色部分为可见区域,下

Android自定义Dialog实现文字动态加载效果

之前在技术问答上面看到一个提问 "加载中-" 后面三个点是动态的,这么一个效果实现.想来想去,好像没想到好的处理方式. 尝试了一下,以一个最笨的方式实现了.先来看一下效果 : 我是通过自定义一个Dialog,加载中的效果,是在Dialog内部实现的,进度还是从Activity里面控制的. 下面是Dialog实现类: public class CustomDialog extends AlertDialog { public CustomDialog(Context context) {

Android 自定义一个可以展开显示更多的文本布局

在查阅其他博主的博文中,发现了一个比较不错的文本伸展的效果,在此借鉴学习.可以先看看到底是什么样的效果 看起来很眼熟吧,很多应用中都有这样的使用场景,其实就是控制textview的maxlines属性,来做的.在这里就简单的说下定义的过程 1.stretchy_text_layout.xml --这是创建一个布局,用来装裱以上展示的控件 [html] view plain copy <?xml version="1.0" encoding="utf-8"?&g

Android自定义ImageView实现自动放大缩小动画

这篇讲的是如何生成一个自定义的ImageView,实现自动放大缩小动画. 为什么实现这个功能呢?因为我想在ViewPager实现图片放大缩小的动画,但是ViewPager几个页面的动画会一起动,而且放大全屏图片的话会相互覆盖,很诡异.于是上网搜demo,一无所获.迫于无奈... 废话不多说,直接贴代码. 1.配置文件直接添加 当直接在布局文件中添加图片的话,可以在自定义View代码中用getDrawable()获取图片资源,然后通过DrawBitmap绘制图片.通过不断绘制图片的位置,达到放大缩