- 浏览: 5825939 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
用手指随便拖。这里采用了线程去绘制,其实也可以在onTouch中绘制。
//在Activity中调用:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppView view=new AppView(this);
setContentView(view);
}
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnTouchListener; import com.ql.app.R; public class AppView extends SurfaceView implements SurfaceHolder.Callback,Runnable,OnTouchListener{ private static final String tag="AppView"; private Context context; private SurfaceHolder holder; private Bitmap icon; private Paint paint; private boolean running=true; public AppView(Context context) { super(context); // TODO Auto-generated constructor stub this.context=context; holder = this.getHolder();//获取holder holder.addCallback(this); this.setOnTouchListener(this); } private void init(){ } private void close(){ } private void logic(){ } private void draw(){ Canvas canvas = holder.lockCanvas();//获取画布 canvas.drawColor(Color.BLACK); canvas.drawBitmap(icon, rect.left,rect.top,null); holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceCreated======================"); icon =getImage(context,R.drawable.icon); rect=new Rect(0,0,icon.getWidth(),icon.getHeight());//图片的rect paint=new Paint(); running=true; new Thread(this).start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceDestroyed======================"); running=false; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceChanged======================"); } @Override public void run() { // TODO Auto-generated method stub int SLEEP_TIME=100; while (running) { long start=System.currentTimeMillis(); logic(); draw(); long end=System.currentTimeMillis(); if(end-start<SLEEP_TIME){ try { Thread.sleep(SLEEP_TIME-(end-start)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } // Region region=new Region(); private Point point=new Point();//点击点 private Rect rect;//图片的rect private boolean canDrag=false;//判断是否点击在图片上,否则拖动无效 private int offsetX=0,offsetY=0;//点击点离图片左上角的距离 @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: point.x=(int)event.getX(); point.y=(int)event.getY(); if(rect.contains(point.x, point.y)){ canDrag=true; offsetX=point.x-rect.left; offsetY=point.y-rect.top; } break; case MotionEvent.ACTION_MOVE: if(canDrag){ rect.left=(int)event.getX()-offsetX; rect.top=(int)event.getY()-offsetY; rect.right=rect.left+icon.getWidth(); rect.bottom=rect.top+icon.getHeight(); if (rect.left < 0) { rect.left = 0; rect.right = rect.left+icon.getWidth(); } if (rect.right > getMeasuredWidth()) { rect.right = getMeasuredWidth(); rect.left = rect.right-icon.getWidth(); } if (rect.top < 0) { rect.top = 0; rect.bottom = rect.top+icon.getHeight(); } if (rect.bottom > getMeasuredHeight()) { rect.bottom = getMeasuredHeight(); rect.top = rect.bottom-icon.getHeight(); } } break; case MotionEvent.ACTION_UP: canDrag=false; break; default: break; } return true; } //**************************************************************************** public static final Bitmap getImage(Context context, int imageId) { return BitmapFactory.decodeResource(context.getResources(),imageId); } }
//在Activity中调用:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppView view=new AppView(this);
setContentView(view);
}
发表评论
-
利用广播实现强制下线功能
2016-12-28 10:45 1473最近一口气买 ... -
Android百分比布局Percent支持库
2015-09-02 11:08 3149虽然有很多的布局可以在 Android 应用程序开发的世界供我 ... -
ViewDragHelper行为测试
2015-08-12 17:36 2745只是简单记录一下 以后可能会实现一些效果 import ... -
android5.x之Palette调色板
2015-07-17 10:30 3342Palette类可以分析一张图片,取出这张图片的特征色,然后为 ... -
使用ClipboardManager剪贴板实现复制粘贴功能
2015-04-10 14:39 3778经常要使用复制粘贴的功能,比如长安一个TextView弹出一个 ... -
LocationListener监听位置变化,当进入到某一距离内时发出提醒
2014-08-19 15:03 7682项目中需要这样的要求: 启动一个服务一直在背后监听当前位置变化 ... -
Android下集成FacebookSDk到项目并发表评论
2013-08-28 14:36 4878项目中需要发表自己的评论到Facebook,需要集成Faceb ... -
MediaRecorder录音,MediaPlayer播放
2013-05-23 09:53 7554直接看代码 import java.io.DataOutp ... -
Notification的基本用法
2013-05-22 11:52 5967android4.0以前: private static ... -
android音频、视频、拍照基础操作
2013-03-27 11:55 2831播放音乐和视频用的是类:MediaPlayer 刻录声音和视 ... -
tabhost通过手势滑动切换activity
2013-02-18 17:59 11164package com.mars.mp3player; ... -
VideoView简单视频播放
2013-02-17 17:17 9305只是上上手而已的例子。 package com.chen ... -
android 再按一次后退键退出应用程序
2012-06-15 21:51 4133private static Boolean isExit ... -
AlarmManager全局定时器/闹钟
2012-02-01 10:11 5863http://407827531.iteye.com/blog ... -
倒计时的CountDownTimer
2011-12-23 13:06 31247直接看这里吧,我只是搬运工。 定时执行在一段时候后停止的倒计 ... -
Android流量统计TrafficStats类的使用
2011-12-06 16:25 26467对于Android流量统计来说在2.2版中新加入了Traffi ... -
ScrollView当显示超出当前页面时自动移动到最底端
2011-09-01 09:42 17013卷轴视图(ScrollView)是指当拥有很多内容,一屏显示不 ... -
在SurfaceView上拖动一架飞机
2011-08-23 12:40 2943接上一篇在SurfaceView上拖动一张小图片 什么叫拖动飞 ... -
用getIdentifier()获取资源Id
2011-07-28 22:36 10775做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片 ... -
利用VelocityTracker监控对触摸的速度跟踪
2011-07-28 22:12 10065VelocityTracker就是速度跟踪的意思。我们可以获得 ...
相关推荐
然而,由于SurfaceView通常用于全屏且需要高效更新的场景,如何在其上添加普通的UI控件,如按钮,就成为一个常见的需求。 在描述中提到的"在SurfaceView上放置控件如按钮等,采用FrameLayout",这是实现这一目标的...
在Android游戏开发中,将一个`Button`控件悬浮于`SurfaceView`之上是一项常见的需求。这通常是为了解决在游戏界面中添加交互元素,如暂停、设置或返回按钮,以便用户可以随时进行操作。本篇文章将深入探讨如何实现这...
综上所述,通过结合SurfaceView、手势检测和矩阵变换,我们可以实现在Android应用中对图片的流畅缩放和滑动操作。然而,由于SurfaceView的特性,这个过程可能会比使用ImageView等其他组件更为复杂。因此,开发者需要...
2. 将控件放在SurfaceView的父布局上:可以将控件添加到SurfaceView的同级布局中,通过调整相对位置,使控件看起来像是在SurfaceView之上,但实际它们是独立的。 3. 自定义控件:如果你需要在SurfaceView上实现特定...
在这个"SurfaceView控制位图缩放、拖移"的Demo中,我们将探讨如何利用SurfaceView来实现位图的动态缩放和拖动功能。 首先,我们需要理解SurfaceView的基本工作原理。SurfaceView拥有自己的渲染线程,它独立于UI线程...
在Android平台上进行游戏开发时,SurfaceView是一个至关重要的组件,它是专门为高性能图形设计的,比如游戏、视频播放等需要连续刷新显示的应用。SurfaceView提供了一种优化的绘图机制,可以将绘制操作与应用程序的...
然而,有时候当我们尝试在SurfaceView上添加其他View时,可能会遇到这些View被SurfaceView覆盖的问题。这个问题通常涉及到Android的视图层次和渲染机制。 1. **SurfaceView的特性** - SurfaceView创建了一个单独的...
- 在SurfaceView上增加Bitmap,可以先创建Bitmap,然后在Canvas上绘制该Bitmap,如`canvas.drawBitmap(bitmap, srcRect, dstRect, paint)`。 4. **屏幕截图**: - 要截图SurfaceView,首先需要将SurfaceView的...
SurfaceView是Android系统中一种特殊的View,它在处理多媒体或者高性能图形渲染时有着独特的优势。在移动设备上,用户交互通常涉及到触摸事件,包括单点触摸和多点触控。多点触控允许用户通过两个或更多的手指进行...
`SurfaceView`创建了一个独立的窗口,并在自己的Surface上绘制内容。这使得它可以在后台线程进行高效的绘制,但同时也意味着普通的截图方法如`View.draw()`或`View.getDrawingCache()`无法获取到`SurfaceView`的内容...
SurfaceView拥有自己的窗口,并且其内容是在单独的硬件层上绘制的,这使得它能够独立于UI主线程进行更新,从而避免阻塞用户界面。这对于处理视频流或高帧率的游戏非常重要,因为它们需要频繁的绘制操作。 实现视频...
Camera.open()用于打开摄像头,setPreviewDisplay()设置预览显示在SurfaceView上,startPreview()启动预览。 3. **SurfaceHolder.Callback接口** 实现SurfaceHolder.Callback接口,我们可以在Surface准备就绪...
然而,当在SurfaceView上添加其他组件(如ImageView、TextView等)时,可能会遇到这些组件被SurfaceView覆盖的问题。本文将深入探讨如何解决这个问题。 首先,理解SurfaceView的工作原理是关键。SurfaceView在窗口...
android surfaceview多图拖拽,希望能够对你有所帮助
这个示例项目旨在展示如何在Android平台上实现高速显示功能。 SurfaceView的核心特性是它拥有自己的独立线程,这个线程称为"SurfaceHolder"回调线程,它与主线程分离,使得UI更新和图形绘制可以在不同的线程中进行...
当在SurfaceView上进行动画操作时,需要考虑线程同步和渲染效率。 Animation在Android中是用于改变View位置、大小、透明度等属性的一组类。主要有两种类型的动画:Property Animation(API 11+)和View Animation...