ViewModel;图片显示问题;触摸事件的拦截

2016-11-25  本文已影响0人  小山包

1.ViewModel的模式有点像ReactNative的状态机

一个视图单元(比如说一个Activity和若干个下属Fragment)共享一个ViewModel,这个ViewModel记载了所有的状态,只要往这个状态机里更新数据,视图就会自动更新,这样就省去了在视图之间传递数据的麻烦。

2.图片显示问题

如果发现图片显示不正常,变扁或者怎么的,考虑scaleType这个属性

3.触摸事件的拦截

有3个相关的方法分别是ViewGroup的

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    return super.onInterceptTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return super.onTouchEvent(event);
}

View的

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return super.onTouchEvent(event);
}

ViewGroup比View多了个intercept相关的方法,一开始对这些方法的返回值很迷惑,搞不懂返回true或者false到底代表着什么,返回哪个会把事件传递下去或者返回上层,之后看了一个教程,弄明白了,这几个方法的返回值的意思是,true->这一层会消费这个事件,不往下(上)传递(回传);false->这一层不消费这个事件,往下(上)传递(回传)。调用顺序是dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent,其中任何一环返回了true都将导致事件被拦截,返回false则按
Activity -> PhoneWindow -> DecorView -> ViewGroup -> ... -> View->
Activity <- PhoneWindow <- DecorView <- ViewGroup <- ... <- View的责任链传递。

4.DataBinding在xml文件中加载图片

参考文章
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0930/3536.html
主要两步:
随便哪个Java文件中,我自己的写法是写在ViewModel中

@BindingAdapter({"bind:imageUrl"})
public static void loadImage(ImageView view, String imageUrl) {
     Picasso.with(view.getContext())
            .load(imageUrl)
            .placeholder(R.drawable.placeholder)
            .into(view);
}

xml文件中

<ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            app:imageUrl="@{viewModel.imageUrl}" />

要点:

上一篇 下一篇

猜你喜欢

热点阅读