`
阿尔萨斯
  • 浏览: 4107912 次
社区版块
存档分类
最新评论

(OnTouchListener) android中的触摸事件的使用(绘图)

 
阅读更多
在View类中除了定义了若干接口外,还有一些自己扩充的监听事件,而触摸事件也是View类定义的监听事件。
OnTouchListener触摸事件主要用到绘图操作、游戏等方面。
OnTouchListener是指用户触摸到屏幕后产生的一些形式,而当用户从屏幕上划过时候,可以通过OnTouchListener事件得到用户当前的坐标,OnTouchListener接口定义如下
public Interface View.OnTouchListener(){
public abstract boolean onTouch(View v,MotionEvent event);
}

事例1.
在main.xml中进行布局(记住这里的TextView宽高是占满)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <!-- 显示当前用户触摸的坐标, -->
    <TextView
        android:id="@+id/info"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="fdsaf"
        />
</LinearLayout>


2.在Activity中写代码完成触摸得到用户的坐标
package com.qn.touch;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class OnTouchActivity extends Activity {
    /** Called when the activity is first created. */
 private TextView info=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        info=(TextView)super.findViewById(R.id.info);
        info.setOnTouchListener(new OnTouchListenerIml());
    }
   
    private class OnTouchListenerIml implements OnTouchListener{
  public boolean onTouch(View v, MotionEvent event) {
   System.out.println("zenm ");
   info.setText(" X= " +event.getX()+ " Y= "+event.getY());//设置文本
   return false;//执行完后还可以执行其他操作
  }
     
     
    }
}


结果

事例二
绘图
如果要绘图必须从新定义一个属于自己的新组件继承android.View.View
如果要定义组件的话一定要考虑好构造方法这个问题,
另外靠基本格式是不行的人,如果要绘图的话,就要保持多个坐标下来。所以 坐标可以通过Point类进行包装(Point类专门用来保持我们的x坐标、y坐标)
1.在main.xml中不需要写入其他的控件而是我们自己通过继承android.view.View类,所定义的
如下是自定义实现view的类和main.xml内的布局
package com.qn.mypain;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.MonthDisplayHelper;
import android.view.MotionEvent;
import android.view.View;
public class MainActivity extends View {
 private List<Point> allpoint=new ArrayList<Point>();//保存所有的操作坐标,只要有一个坐标触发就通过allpoint集合保存
 public MainActivity(Context context, AttributeSet attrs) {//构造方法作用接收Context,同时接收属性集合
  super(context, attrs);//调用父类的构造方法
  super.setOnTouchListener(new OnTouchListenerImpl());//相当于定义了一个触摸事件
 }
 private class OnTouchListenerImpl implements OnTouchListener{
  
//  现在触摸事件只是保存了所有的坐标点,如果想要这些内容显示,则需要复写View类的一个方法
//  OnDraw()表示重绘(绘图);
  public boolean onTouch(View v, MotionEvent event) {
   Point point=new Point((int)event.getX(),(int)event.getY());//将我们的坐标点保存到Point类中
   if(event.getAction()==MotionEvent.ACTION_DOWN){//用户按下 表示从新保存点
    MainActivity.this.allpoint=new ArrayList<Point>();//从新绘制一张图
    MainActivity.this.allpoint.add(point);
   }else if(event.getAction()==MotionEvent.ACTION_UP){//用户松开
    MainActivity.this.allpoint.add(point);//记录坐标点
    MainActivity.this.postInvalidate();//移动一点画一点移一点画一点(重新绘图形)
    
   }else if(event.getAction()==MotionEvent.ACTION_MOVE){//用户移动
    MainActivity.this.allpoint.add(point);//记录坐标点
    MainActivity.this.postInvalidate();//移动一点画一点移一点画一点(重新绘图形)
   }
   
   return true;//要改为true表示下面不在执行了
  }
  
  
 }
// 由于这个类没有太多复杂的操作,所以直接将这个类配置到布局管理器中即可(这是一个新的组件类)
 @Override
 protected void onDraw(Canvas canvas) {//进行绘图
  Paint paint=new Paint();//依靠此类开始画线
  paint.setColor(Color.RED);//定义图的颜色
  if(MainActivity.this.allpoint.size()>1){//现有坐标点保存的时候进行开始绘图
   Iterator<Point> iter=MainActivity.this.allpoint.iterator();//固定操作 通过点绘图
   Point first=null;
   Point last=null;
   while(iter.hasNext()){
    if(first==null){
     first=(Point)iter.next();//取出坐标
    }else{
     if(last!=null){//前一阶段完成
      first=last;//重新开始下一阶段
     }
     last=(Point)iter.next();//结束点坐标
     canvas.drawLine(first.x, first.y, last.x, last.y, paint);
     
    }
   }
  }
  
 }
}
   

 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <!-- 新的组件类(主要用于画图)而后Activity不需要其他二外的操作 就是调用布局管理器-->
    <com.qn.mypain.MainActivity
        android:id="@+id/paintView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>
 
  

2.在Activity中只需要调用main.xml布局就行
package com.qn.mypain;
import android.app.Activity;
import android.os.Bundle;
public class MyTouch extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
 // TODO Auto-generated method stub
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
}
}

分享到:
评论

相关推荐

    android悬浮框的onTouch和onClick事件同时存在

    解决了android悬浮框的onTouch和onClick事件可以同存的问题。

    OnTouchListener的用法

    OnTouchListener的用法,适合对于一个点击的textview使其点击之后可以改变颜色

    完全理解android事件分发机制

    **onTouch():**这个函数是View提供给我们的OnTouchListener这个接口中的函数,在这里面可以自定义对触摸事件的处理逻辑。 **onTouchEvent():**这个函数是view内部的触摸事件的处理方式,其间包括获取焦点,...

    Android事件分发与消费

    之前写过一篇Android事件分发机制详解,感觉比较乱,这里再总结一下。网上已经有很多前辈分析过源码,大家可以参考,我这里尽量不做过多的源码分析,仅仅从流程上分析。事件分发和消费我们主要涉及到以下三个方法:...

    触摸屏事件示例1

    触摸屏事件 示例1 当希望触摸事件对一个特定的View 对象执行某个新操作时,可以扩展该类, 覆写 onTouchEvent() 方法并加入自己的逻辑。 也可以实现View.OnTouchListener 接口 并在View 对象上设置一个回调处理程序...

    Android View.OnTouchListener实现可获取连续的异步回调,同时以所需的轮询速率保持触摸状态。-Android开发

    OnViewTouchHoldListener Android View.OnTouchListener实现库以所需的轮询速率异步获取onViewTouchHold回调用法view.setOnTouchListener(OnViewTouchHoldListener(object:On OnViewTouchHoldListener Android ...

    详谈OnTouchListener与OnGestureListener的区别

    Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,是通过OnTouchListener实现的;而手势是通过OnGestureListener实现的,那么这两者有什么关联呢? OnTouchListener OnTouchListener接口中包含一个...

    Android使用ViewFlipper做页面切换,与手势滑动切换的使用

    在android上实现手势的识别也比较简单,可以实现OnTouchListener和OnGuestureListener接口, 然后在OnTouch函数中注册GestureDetector来判别手势动作, http://wang-peng1.iteye.com/blog/572886 ...

    a17Exercise2.zip

    按键事件:通过在EditText...触摸事件:通过在控件上调用setOnTouchListener()函数注册触摸事件的监听器接口View.OnTouchListener(),并重载onTouch()事件处理函数,实现触摸事件。 AS项目,解压后直接用AS打开即可

    Android长按圆型有颜色变化显示进度,长按结束事件

    Android长按圆型有颜色变化显示进度,长按结束事件:长按按钮是一个圆,加入了OnTouchListener事件的监听。长按后该圆会慢慢的变颜色,等到整个圆的颜色变化完成后,则触发另一事件。适用于长按结束事件,增加用户...

    Android触摸及手势操作GestureDetector

    View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,如下: public class MainActivity extends Activity { ... // This example shows an...

    Android组件ViewFlipper的使用

    import android.view.View.OnTouchListener; import android.view.animation.AlphaAnimation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.ViewFlipper...

    Android 事件触发机制的深入学习

    最近在研究android的事件触发和传播机制,说来很惭愧,web下的事件太熟悉不过了,可在android中却很郁闷,常用的触摸事件都糊里糊涂的,在网上看了半天,也整理一份,供大家参考: public class ...

    Android实现手势滑动识别功能

    对于Android中的手势识别可以从以下三个Listener入手——OnTouchListener、OnGestureListener、OnDoubleTapListener。这三个监听器分别是触摸监听、手势滑动监听和屏幕双击操作监听。很多的时候我们需要这些手势识别...

    Android中RecyclerView实现分页滚动的方法详解

    要实现翻页滑动首先我们要确定是向前翻页还是向后翻页,这里通过记录开始翻页前当前的位置和滑动后的位置比较即可得知,下面选择手指触摸按下时滑动的位置为当前开始滑动位置: //当前滑动距离 private int ...

    Android onTouchEvent事件中onTouch方法返回值(介绍)

    2、若return true说明你已经成功执行onTouch方法了,在执行完onTouch中的代码之后,这个onTouch事件就结束了。也不会再调用组件如Gallery默认的onTouch方法了。在onTouch方法中,我们可以做很多操作,如move,down,up...

    Android 功能完善的数独游戏源代码.rar

    同时游戏中还涉及到了许多的android编程知识点,比如ColorPickerDialog、DrawView、OnTouchListener等的应用技巧,在界面中的滑动菜单也做的不错,滚动显示和隐藏菜单时,手指滑动需要达到指定速度才行,这样可有效...

    Viewpager仿QQ横滑退出

    Viewpager仿QQ横滑退出,解决implements OnTouchListener中重写onTouch事件无法获取ACTION_DOWN中getX的值

    Android手势识别GestureDetector分析

    在Android系统中,每一次手势交互都会依照以下顺序执行。 1. 接触接触屏一刹那,触发一个MotionEvent事件。 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。 3. 通过GestureDetector...

    Android应用中制作选中后图标变大浮动效果的代码分享

    实际上是给图标的触摸事件中添加了一个缩放的动画,代码如下. package com.test; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import ...

Global site tag (gtag.js) - Google Analytics