首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android图片按手势进展移动

2012-12-15 
android图片按手势进行移动正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过

android图片按手势进行移动
  正在做一个游戏,其中要用到用手滑动一个路线,手抬起后,人物图片按此路线移动过去。请大家提供点思路、、、
[最优解释]
= =! 居然被推荐了
源码放过来 方便大家看。。。


class CustomView1 extends View{
 
private Paint paint;
        private ArrayList<PointF> graphics = new ArrayList<PointF>();
        private Paint  lPaint;
        private Path   mPath;
        private  int of = 0;
        private Boolean over =false;
        private float mX, mY;
        private static final float TOUCH_TOLERANCE = 4;
 
        public CustomView1(Context context) {
            super(context);
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColor(Color.RED);
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeCap(Paint.Cap.ROUND);
            paint.setStrokeWidth(65);
            
            lPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            lPaint.setColor(Color.BLACK);
            lPaint.setStyle(Paint.Style.STROKE);//空心
            lPaint.setStrokeJoin(Paint.Join.ROUND);
            lPaint.setStrokeCap(Paint.Cap.ROUND);
            lPaint.setStrokeWidth(5);
            
            mPath = new Path();
            
        }
        
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            float x = event.getX();
            float y = event.getY();
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            over = false;
            graphics.clear();
            of=0;
            graphics.add(new PointF(x, y));


             touch_start(x, y);
                 invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
            graphics.add(new PointF(x, y));
            touch_move(x, y);
            invalidate();
                break;
            case MotionEvent.ACTION_UP:
            over = true;
            touch_up();
                invalidate();
                break;
        }
 
            return true;
        }
        
        private void touch_start(float x, float y) {
            mPath.reset();
            mPath.moveTo(x, y);
            mX = x;
            mY = y;
        }
        private void touch_move(float x, float y) {
            float dx = Math.abs(x - mX);
            float dy = Math.abs(y - mY);
            if (dx >= TOUCH_TOLERANCE 
[其他解释]
一般思路是先做人物两点件移动,手滑动时记录划过的坐标点组成一个点的集合(可以设采样间隔不用记录每个点,间隔越小人物移动的越平滑),再循环取集合内相邻的两点做人物移动。
[其他解释]
- -,
首先你得重写onTouchEvent是必须的

然后使用一个
定义private ArrayList<PointF> pinfs = new ArrayList<PointF>();来存所以的点
在onTouchEvent中
  


switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                 pinfs.add(new PointF(event.getX(),event.getY()));
                    break;
                case MotionEvent.ACTION_MOVE:
                   pinfs.add(new PointF(event.getX(),event.getY()));
                    break;


                case MotionEvent.ACTION_UP:
                    invalidate();
                    break;
            }

然后在    @Override
        protected void onDraw(Canvas canvas) {
            for (PointF point : pinfs) {
              这里绘制人物移动
            }
 
        }





大概应该是这样。。没实验。。待会在试 = =。!


[其他解释]
额。
今天实现了下

http://www.yoooo.org/?p=58
[其他解释]
引用:
额。
今天实现了下

http://www.yoooo.org/?p=58


真的很不错,分享给更多人吧
[其他解释]
学习了。。。
[其他解释]
 dy >= TOUCH_TOLERANCE) {
                mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
                mX = x;
                mY = y;
            }
        }
        private void touch_up() {
            mPath.lineTo(mX, mY);
        }
 
        @Override
        protected void onDraw(Canvas canvas) {
        //canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
        canvas.drawColor(Color.WHITE);//清理
        canvas.drawPath(mPath, lPaint);
        if(over&&graphics.size()>0){
            canvas.drawPoint(graphics.get(of).x, graphics.get(of).y, paint);
            of+=1;
            if(of<graphics.size()){
            if(of==graphics.size()-1){
                mPath.reset();//移动完成后移除线条
                }
            invalidate();
            }
        }


        }
    }


[其他解释]
学习了
[其他解释]
MARK一下···学习咯··android有钱途!
[其他解释]
安卓不错,学习中!!!
[其他解释]
学习了。。。
[其他解释]
貌似很强大。 顶了
[其他解释]
学习。
[其他解释]
加油,支持安卓
[其他解释]
路过,学习中
[其他解释]
高手如云啊。正在学习android开发中。
[其他解释]
该回复于2011-09-01 10:18:41被版主删除
[其他解释]
路过,不懂
[其他解释]
引用:
额。
今天实现了下

http://www.yoooo.org/?p=58

不错~~
[其他解释]
学习了。。。
[其他解释]
该回复于2011-11-16 10:10:33被版主删除
[其他解释]
占楼学习
[其他解释]
刚要学习
[其他解释]
很好,支持下
[其他解释]
就是喜欢这种看着清晰的。直接拿来用或者改改都方便。呵呵。学习了。
[其他解释]
真的很不错!
[其他解释]
高手喫!!!!!!!!!
[其他解释]
高手喫!!!!!!!!!
[其他解释]
准备学习
[其他解释]
引用:
= =! 居然被推荐了
源码放过来 方便大家看。。。

Java code

    class CustomView1 extends View{
         
        private Paint paint;
        private ArrayList<PointF> graphics = new ArrayList<PointF>();
       ……


昨晚没来的急看呢、、、、今天拿来看看、、、、非常感谢啊、、、、、
[其他解释]
低调路过接分。。
[其他解释]
不错···
[其他解释]
- -,
首先你得重写onTouchEvent是必须的

然后使用一个
定义private ArrayList<PointF> pinfs = new ArrayList<PointF>();来存所以的点
在onTouchEvent中
  
Java code


switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                 pinfs.add(new PointF(event.getX(),event.getY()));
                    break;
                case MotionEvent.ACTION_MOVE:
                   pinfs.add(new PointF(event.getX(),event.getY()));
                    break;
                case MotionEvent.ACTION_UP:
                    invalidate();
                    break;
            }

然后在    @Override
        protected void onDraw(Canvas canvas) {
            for (PointF point : pinfs) {
              这里绘制人物移动
            }
 
        }




[其他解释]
真的很不错!
[其他解释]
学习了,mark一下
[其他解释]
低调拿分...
[其他解释]
我是来学习和拿分的
[其他解释]
该回复于2011-09-19 11:53:31被版主删除
[其他解释]
路过,路过,学习学习,顶顶
[其他解释]
低调拿分,高手多多
[其他解释]
mark
[其他解释]
该回复于2011-08-22 14:08:15被版主删除
[其他解释]
该回复于2011-08-22 15:47:32被版主删除
[其他解释]
路过,学习一下。
[其他解释]
onTouchEvent();
[其他解释]
学习仲啊··
[其他解释]
该回复于2011-08-22 14:08:47被版主删除
[其他解释]
该回复于2011-08-22 14:09:29被版主删除
[其他解释]
马克,整个人都yoooooooo了
[其他解释]
给力,学习
------其他解决方案--------------------


学习了,拿分走人
[其他解释]
努力 加油 顶你
[其他解释]
留个名, 学习学习.!
[其他解释]
学习了啊。。。
[其他解释]
真的很不错,分享给更多人吧
[其他解释]
谢谢分享
[其他解释]
马上 就要 开始 学了 。现在看看!
[其他解释]
sssssssf
[其他解释]
貌似很深奥,学习
[其他解释]
回帖 赚个积分
[其他解释]
我要学android
[其他解释]
来学习的
[其他解释]
看了看。
[其他解释]
顶一下
[其他解释]
学习了!!

[其他解释]
路过帮顶 
[其他解释]
真的很好
[其他解释]
学习了,好东西
[其他解释]
高人多多,低调路过
[其他解释]
谢谢楼主。
[其他解释]

引用:
= =! 居然被推荐了
源码放过来 方便大家看。。。

Java code


    class CustomView1 extends View{
         
        private Paint paint;
        private ArrayList<PointF> graphics = new ArrayList<PointF>();
     ……

[其他解释]
游戏开发,对坐标要求很高啊
[其他解释]
额,,不是很明白
[其他解释]
mark 这个算法精妙啊
[其他解释]
支持一下
[其他解释]
谁能讲一下 mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);的用法吗?
[其他解释]
Gallery里移动大图片一样的功能吧。
楼住的触摸屏是支持多点触摸吗?
[其他解释]
恩,恩
[其他解释]
不错,学习了!
[其他解释]
很详细,我喜欢。
------其他解决方案--------------------


正想弄一个,先学习先
[其他解释]
谢谢,对我帮助很大,学习了!
[其他解释]

引用:
谁能把这个图片按手势移动的工程发我下啊  我刚学android想试试效果  可以给他40份 多谢啊

上面有代码
[其他解释]
谁能把这个图片按手势移动的工程发我下啊  我刚学android想试试效果  可以给他40份 多谢啊  
[其他解释]
看着讨论这么火,Android,很憧憬啊
[其他解释]
请问一下如果我要把这个功能应用于MapView,需要如何修改呢?
引用:
= =! 居然被推荐了
源码放过来 方便大家看。。。
Java code

    class CustomView1 extends View{
         
        private Paint paint;
        private ArrayList<PointF> graphics = new ArrayList<PointF>();
        privat……

[其他解释]
貌似运行没效果啊  
引用:
= =! 居然被推荐了
源码放过来 方便大家看。。。
Java code

    class CustomView1 extends View{
         
        private Paint paint;
        private ArrayList<PointF> graphics = new ArrayList<PointF>();
        privat……

[其他解释]
该回复于2011-10-27 08:22:56被版主删除
[其他解释]
源码有错误,能不能把工程发下我啊,感激不尽,317721812@qq.com

热点排行