写这篇文章,是因为试了这篇《Android通过手势实现的缩放处理》http://www.oschina.net/code/snippet_16_2735
介绍的缩放代码在(G11 android2.3.3)上运行,完成没有缩放效果,只有一个蓝色的圆,跟着手指移动。。。。只好自己看下
android自带的demo和API,自己实现下缩放效果。
MotionEvent类中有个方法getActionMasked(),这个方法可以检查触摸的状态:
当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2;
当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2;
可以使用MotionEvent的getPointerCount()方法检查当前屏幕有多少个触摸点。
实现代码在《Android通过手势实现的缩放处理》的基础上做了点修改。
import
android.app.Activity;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.os.Bundle;
import
android.view.MotionEvent;
import
android.view.View;
public
class
MultiTouchTestActivity
extends
Activity {
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
View view
=
new
MultiTouchView(
this
);
setContentView(view);
}
class
MultiTouchView
extends
View {
private
float
x1;
private
float
y1;
private
float
x2;
private
float
y2;
private
float
r
=
30F;
private
float
r1
=
0F;
private
float
r2
=
0F;
private
int
max
=
0
;
public
MultiTouchView(Context context) {
super
(context);
}
@Override
public
boolean
onTouchEvent(MotionEvent event) {
int
action
=
event.getActionMasked();
int
p
=
event.getPointerCount();
//
接触点数
int
N
=
event.getHistorySize();
if
(N
>
max){
max
=
N;
}
String sff
=
"
"
;
//
只处理两点触摸
if
(p
==
2
&&
action
==
MotionEvent.ACTION_POINTER_1_DOWN){
x1
=
event.getX(
0
);
y1
=
event.getY(
0
);
x2
=
event.getX(
1
);
y2
=
event.getY(
1
);
}
//
只处理两点触摸
if
(p
==
2
&&
action
==
MotionEvent.ACTION_MOVE){
r1
=
(
float
) Math.sqrt((x1
-
x2)
*
(x1
-
x2)
+
(y1
-
y2)
*
(y1
-
y2))
/
2
;
float
tx1
=
event.getX(
0
);
float
ty1
=
event.getY(
0
);
float
tx2
=
event.getX(
1
);
float
ty2
=
event.getY(
1
);
r2
=
(
float
) Math.sqrt((tx1
-
tx2)
*
(tx1
-
tx2)
+
(ty1
-
ty2)
*
(ty1
-
ty2))
/
2
;
}
if
(p
==
2
&&
action
==
MotionEvent.ACTION_POINTER_1_UP){
r
=
r
+
(r2
-
r1);
}
if
(p
==
1
){
x1
=
event.getX(
0
);
y1
=
event.getY(
0
);
}
for
(
int
j
=
0
; j
<
p; j
++
) {
int
x
=
(
int
)event.getX(j);
int
y
=
(
int
)event.getY(j);
sff
=
sff
+
"
(
"
+
x
+
"
,
"
+
y
+
"
)
"
;
}
MultiTouchTestActivity.
this
.setTitle(String.valueOf(action
+
"
"
+
p
+
"
r:
"
+
(
int
)r)
+
"
r1:
"
+
(
int
)r1
+
"
r2:
"
+
(
int
)r2);
invalidate();
return
true
;
}
@Override
protected
void
onDraw(Canvas canvas) {
super
.onDraw(canvas);
Paint paint
=
new
Paint();
paint.setColor(Color.BLUE);
canvas.drawCircle(x1, y1, r
+
r2
-
r1, paint);
}
}
}
在AVD(android2.3.3)中运行效果
分享到:
相关推荐
总结,实现Android手指缩放效果的关键在于理解和利用GestureDetector与MotionEvent,通过监听和处理触摸事件,结合Matrix类来改变视图的缩放属性。这一功能极大地增强了用户的交互体验,是许多Android应用中的必备...
在Android开发中,实现图片的缩放、双击旋转以及拖动展示是一项常见的需求,尤其在...通过对触摸事件的处理,实现图片的拖动、缩放和双击旋转效果。通过不断的迭代和优化,可以打造出一个既美观又实用的图片查看器。
在Android中,为了实现特定的功能或视觉效果,开发者经常需要创建自定义的View。这种情况下,开发者需要继承自`View`或`ViewGroup`类,并重写其`onDraw()`方法来绘制自己的图形。在这个图片查看控件中,开发者可能...
在Android开发中,ImageView是用于显示图像的基本控件,但默认情况下它并不支持用户缩放。为了实现可缩放的ImageView功能,开发者通常需要自定义一个控件或者使用第三方库。这里提到的"Android可缩放ImageView"可能...
`onScale()`方法在每次手指缩放时被调用,我们可以在这里获取到缩放的比例因子(scaleFactor),并根据这个因子更新图片的缩放比例。 2. 在`onTouchEvent()`方法中,将触摸事件传递给`ScaleGestureDetector`进行处理...
3. **两手指缩放**: 两手指同时触摸屏幕实现图片放大缩小,依赖于ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。ACTION_POINTER_DOWN表示有第二个手指触摸屏幕,ACTION_POINTER_UP表示其中一个手指离开。通过比较...
"带缩放效果的圆形头像"是一个专为Android平台设计的自定义视图,它改进了标准的CircleImageView,增加了动态缩放功能,使头像在加载或者点击时能够产生平滑的大小变化,提升应用的视觉效果。 首先,...
本文将深入探讨如何在Android中实现一个自定义的RelativeLayout,使其能够支持TextView的拖动、缩放和旋转功能。 首先,我们需要创建一个新的自定义布局类,继承自RelativeLayout。在这个类中,我们将重写一些关键...
5. **平滑滚动和缩放**:为了提供更流畅的体验,组件可能实现了平滑滚动和渐进式缩放,通过动画效果让这些操作看起来更加自然。 6. **性能优化**:处理大图时,可缩放ImageView可能使用Bitmap的位图操作技术,如...
通过阅读和理解这些代码,开发者可以更好地学习如何自定义Android UI组件,实现更复杂的交互效果。 总的来说,这个自定义的`DragZoom ImageView`是一个强大的工具,它结合了Android的触摸事件处理、Matrix变换以及...
在Android开发中,动画效果是提升用户体验的重要手段之一,尤其在触摸交互中,手指移动动画效果能够让用户感受到更直观、流畅的操作反馈。本篇将详细探讨如何在Android中实现手指移动动画效果,主要关注`...
本文将深入探讨如何在Android平台上实现图片的拼接、缩放、特效、拖动以及翻转功能,这些都是移动应用中常见的交互和视觉元素。我们将以`DrawDemo`为例,来阐述这些技术的实现细节。 1. **图片拼接**: 图片拼接是...
在Android开发中,实现缩放和拖动效果是创建用户友好界面的重要部分,尤其是在开发交互式的应用程序时。本文将深入探讨如何在Android中实现这两种功能,并对比不同的实现方式。 首先,我们来了解一下缩放(Zooming...
- **postScale()** 和 **preScale()**:这两个方法分别在当前矩阵后面和前面应用缩放操作,可以用来实现不同的缩放效果,例如连续缩放或者相对原点的缩放。 4. **触摸事件处理** 为了响应用户的缩放手势,需要...
在ACTION_MOVE事件中,通过计算手指移动的差值来更新View的坐标,实现拖动效果。对于缩放,我们可以利用Matrix类来处理。首先,获取到原始的Matrix,然后在ACTION_DOWN和ACTION_UP之间,根据两个手指之间的距离变化...
我们需要监听用户的触摸事件,然后根据手指间的距离变化来计算缩放比例。可以使用 ScaleGestureDetector 类来帮助处理这些手势: ```java private ScaleGestureDetector mScaleDetector; @Override protected void...
为了实现平滑的滚动和缩放效果,开发者通常会结合`Scroller`或`Animator`类。`Scroller`用于处理物理性的滑动动画,`Animator`则可以实现更为复杂的动画效果。通过计算目标位置和当前位置的差值,逐步更新`Matrix`并...
本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...
5. **平滑动画**: 为了提供更好的用户体验,可以使用`ScalableInterpolator`或其他插值器来平滑地过渡缩放效果。这使得图片在缩放过程中更加自然,避免突然跳变。 6. **边界检查**: 当图片被缩放到一定程度时,需要...
实现流畅的平移、缩放和旋转效果,性能优化必不可少。可以使用`硬件加速`(`android:hardwareAccelerated="true"`),利用GPU来加速视图的渲染。此外,适时更新视图并避免不必要的重绘也是提高性能的关键。 7. **...