可在全屏幕自由拖动的view
来源:互联网 发布:sftp端口 编辑:程序博客网 时间:2024/05/21 08:36
代码片段(5)
[图片] 程序截图
[代码] Activity.java
01
package
com.zhuozhuo;
02
03
import
android.app.Activity;
04
import
android.os.Bundle;
05
06
public
class
CSDNActivity
extends
Activity {
07
/** Called when the activity is first created. */
08
@Override
09
public
void
onCreate(Bundle savedInstanceState) {
10
super
.onCreate(savedInstanceState);
11
setContentView(R.layout.main);
12
}
13
14
15
}
[代码] CustomView.java
01
package
com.zhuozhuo;
02
03
import
android.content.Context;
04
import
android.graphics.Canvas;
05
import
android.graphics.Color;
06
import
android.graphics.Paint;
07
import
android.graphics.Rect;
08
import
android.util.AttributeSet;
09
import
android.view.MotionEvent;
10
import
android.view.View;
11
12
/**
13
* 自定义的view,需要覆盖onDraw()方法绘制控件,覆盖onTouchEvent()接收触摸消息
14
*/
15
public
class
CustomView
extends
View {
16
17
private
static
final
int
WIDTH =
40
;
18
19
private
Rect rect =
new
Rect(
0
,
0
, WIDTH, WIDTH);
//绘制矩形的区域
20
private
int
deltaX,deltaY;
//点击位置和图形边界的偏移量
21
private
static
Paint paint =
new
Paint();
//画笔
22
23
public
CustomView(Context context, AttributeSet attrs) {
24
super
(context, attrs);
25
paint =
new
Paint();
26
paint.setColor(Color.RED);
//填充红色
27
}
28
29
@Override
30
protected
void
onDraw(Canvas canvas) {
31
canvas.drawRect(rect, paint);
//画矩形
32
33
}
34
35
@Override
36
public
boolean
onTouchEvent (MotionEvent event) {
37
int
x = (
int
) event.getX();
38
int
y = (
int
) event.getY();
39
switch
(event.getAction()) {
40
case
MotionEvent.ACTION_DOWN:
41
if
(!rect.contains(x, y)) {
42
return
false
;
//没有在矩形上点击,不处理触摸消息
43
}
44
deltaX = x - rect.left;
45
deltaY = y - rect.top;
46
break
;
47
case
MotionEvent.ACTION_MOVE:
48
case
MotionEvent.ACTION_UP:
49
Rect old =
new
Rect(rect);
50
//更新矩形的位置
51
rect.left = x - deltaX;
52
rect.top = y - deltaY;
53
rect.right = rect.left + WIDTH;
54
rect.bottom = rect.top + WIDTH;
55
old.union(rect);
//要刷新的区域,求新矩形区域与旧矩形区域的并集
56
invalidate(old);
//出于效率考虑,设定脏区域,只进行局部刷新,不是刷新整个view
57
break
;
58
}
59
return
true
;
//处理了触摸消息,消息不再传递
60
}
61
62
}
[代码] main.xml 布局文件
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
3
android:orientation
=
"vertical"
4
android:layout_width
=
"fill_parent"
5
android:layout_height
=
"fill_parent"
6
>
7
<
com.zhuozhuo.CustomView
android:layout_width
=
"fill_parent"
8
android:layout_height
=
"fill_parent"
/>
9
</
LinearLayout
>
- 可在全屏幕自由拖动的view
- 可在全屏幕自由拖动的view
- Android 可在全屏幕自由拖动的view
- Android可在全屏幕自由拖动的view
- 实现自定义view(1):可在全屏幕自由拖动的view
- 一直在寻找的,可在全屏幕自由拖动的view,很炫!
- 实现可自由拖动的view
- 可自由拖动的DIV层方块
- Android 悬浮在Activity内的可拖动View
- 一个可拖动的View
- View的自由拖动(属性动画的实践之一)
- Android-可随意拖动的View
- ViewDragHelper详解- 可拖动的view
- ViewDragHelper详解- 可拖动的view
- 自定义VIEW,可拖动的控件
- android开发自定义View,可以自由拖动的控件
- Android:全屏幕拖动控件的实现
- 自定义view,可拖动
- 如何使用Aspose.BarCode创建条形码
- 串口转以太网模块—WIZ100SR 用户手册(一)
- 程序员成熟的标志
- How to recognize explorer windows' property during playback
- NSData 与 NSString,Byte数组,UIImage 的相互转换
- 可在全屏幕自由拖动的view
- c#调用默认浏览器打开网址
- android中一些view处理(拖动,定位,显示,图层)
- C++ 0x之右值引用
- 免安装Oracle客户端使用
- Android中UI(View)的刷新
- 有关background的使用同一图片做背景position定位的方法
- 高效代码审查的十个经验
- Android使用Intent传递复杂参数及复杂参数列表