本文的目的在于测试android viewgroup中 touchevent的传递方向。
ViewGroup 中onInterceptTouchEvent()
View 结构:
FirstGroup
SecondGroup
Child
1、默认情况下:
super.onInterceptTouchEvent()
super.onTouchEvent()
都是返回false.
这个时候的传递方向(注意,这个时候并没有触发Move事件!):
2、假如FirstGroup的onInterceptTouchEvent() 返回 true
那么从属于FirstGroup的所有child view的touch事件都被FirstGroup给截取了:
3、FirstGroup的onInterceptTouchEvent() 返回 true
并且 FirstGroup的onTouchEvent()返回true
那么
<!--[endif]-->
4、FirstGroup的onInterceptTouchEvent() 返回 false
并且FirstGroup的onTouchEvent()返回true
那么
<!--[endif]-->
5、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 true
并且 SecondGroup的onTouchEvent()返回false
那么从属于SecondGroup的所有child view的touch事件都被SecondGroup给截取了:
<!--[endif]-->
6、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 true
并且 SecondGroup的onTouchEvent()返回true
<!--[endif]-->
7、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 false
并且SecondGroup的onTouchEvent() 返回true
<!--[endif]-->
8、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 false
并且SecondGroup的onTouchEvent() 返回false
Child的onTouchEvent()返回true
总结 根ViewGroup的onInterceptTouchEvent() 是否要拦截(注意,拦截必须在第一次action down的时候!)touch event如果true,就是拦截所有的touch事件,并交给当前的viewgroup去处理!不拦截的话,就交给儿子ViewGroup处理touch event,同样的,要是它不拦截,就可以继续传递下去给儿子(也就是根ViewGroup的孙子)
如果目标view的 touch event返回false,那么,所有都不会产生action move动作;如果返回true,那么,目标view会产生touch event,而且会触发它的父view们onInterceptEvent 的 action move,注意并不会触发他们的touch event~
一般情况下:
onInterceptTouchEvent()是自Root 到 Child(要记得在Action Down中处理)
onTouchEvent()是自Child 到 Root.
方法:
/**
* 读取数据 获取网络图片
* @param path 网络图片路径
* @return
* @throws Exception
*/
public static byte[] getImage(String path) throws Exception
{
URL url=new URL(/blog_article/path/index.html);
HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setConnectTimeout(5*1000);
urlConnection.setRequestMethod("GET");
InputStream inputStream=urlConnection.getInputStream();
if(urlConnection.getResponseCode()==200)
{
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while((len=inputStream.read(buffer))!=-1)
{
outputStream.write(buffer,0,len);
}
inputStream.close();
outputStream.close();
return outputStream.toByteArray();
}
return null;
}
方法的调用:
try
{
byte[] data=ImageService.getImage(path);
if(data!=null){
Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);//构造一张位图
imageView.setImageBitmap(bitmap);//完成图片的显示
} else {
Toast.makeText(MainActivity.this, R.string.fail, 1).show();
}
} catch (Exception e)
{
Toast.makeText(MainActivity.this, R.string.imagefail, 1).show();
e.printStackTrace();
}