熊猫齐牌乐下载链接 当前位置:首页>熊猫齐牌乐下载链接>正文

熊猫齐牌乐下载链接

发布时间:2019-02-18

原标题:View滑动的常见方式

“刘皓先生这是怎么了?”静香还没拆开绷带,只是听到房门突然打开然后一声物体落地撞击声响起最后就是川子尖叫起来。

集杰大连棋牌下载2.4版

“猛鬼兽大帝,说到底也不过是一只成熟期的猛鬼兽,相当于其他数码宝贝种族的王,不过实力却不是之前的猛鬼兽能比。”刘皓看着猛鬼兽大帝说道。
“果然,三千焱炎火背后有人操纵,最近的一系列诡异变化,三千焱炎火的实力提升得那么快都是有人的。”得到了证实玄衣心里想道,斗气大陆有人能让三千焱炎火短短时间提升那么多并且还在打它主意的当然是刘皓了。

“虫子都颤抖了,究竟是什么?刘皓体内潜藏着一股让虫子都感受到危险的力量?“油女志乃心里暗暗想道,一时之间十二小强心里都有着各自的想法。

今天头条的面试官问起了实现View滑动的方式,其实前几天刚刚看过,但还是没能答上来,这里再来总结一遍。

1、使用scrollTo/scrollBy

为了实现View滑动,Android专门提供了这两个方法让我们使用。这两个函数的区别是scrollBy提供的是基于当前位置的相对滑动,而scrollTo提供的是基于起始位置的绝对滑动。

需要注意的是实际的滑动方向与我们想当然的方向不同,这个问题与View的内部变量mScrollX和mScrollY的含义有关,scrollTo函数与scrollBy函数实际上就是对这两个变量做出修改。

mScrollX:View的左边缘坐标减去View内容的左边缘坐标。

mScrollY:View的上边缘坐标减去View内容的上边缘坐标。

另外一个需要注意的地方是超出View边缘范围的内容是不会显示的。

2、使用动画

动画的方式主要是操作View的translationX与translationY属性。可以使用XML文件自定义动画效果也可以使用属性动画实现。

2.1、自定义动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <translate
        android:duration="100"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100"
        android:toYDelta="0"
        android:interpolator="@android:anim/linear_interpolator"/>
</set>
View view = findViewById(R.id.target_view);
Animation animation = AnimationUtils.loadAnimation(context, R.anim.target_animation);
view.startAnimation(animation);

注意在XML文件中有一个fillAfter属性,如果设置为false的话当动画结束时View会恢复到原来的位置。

2.2、属性动画
View view = findViewById(R.id.target_view);
ObjectAnimator.ofFloat(view, "translationX", 0, 100)
    .setDuration(100)
    .start();

3、改变布局参数

第三种方法是改变View的LayoutParams,与之前的方法相比,这种方法显得不是很正统,但是也可以实现我们的需求。举个例子,假如我们想把一个View右移100dp,那么最简单的方式就是把它LayoutParams里的marginLeft参数的值增加100dp。但这种方法要根据View所在的父布局灵活调整,在一些情况下改变margin值并不能改变View的位置。

View view = findViewById(R.id.target_view);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view .getLayoutParams();
params.leftMargin += 10;
mTargetTextView.setLayoutParams(params);

还有一个相似的方法,但可用性要好一些,那就是调用View的layout方法,直接修改View相对于父布局的位置。

int offsetX = 10;
View view = findViewById(R.id.target_view);
view.layout(mTargetTextView.getLeft() + offsetX,
            view.getTop(),
            view.getRight() + offsetX,
            view.getBottom());

4、使用Scroller实现渐进式滑动

上边提到的滑动方式有一个共同的缺点那是他们都不是渐进式的滑动。实现渐进式滑动的共同思想就是将一个滑动行为分解为若干个,在一段时间内按顺序完成。

这里介绍使用Scroller类的实现方式。

public class ScrollerTextView extends TextView {

    private Scroller mScroller;

    public ScrollerTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mScroller = new Scroller(context);
    }

    public void smoothScrollBy(int dx, int dy) {
        int scrollX = getScrollX();
        int scrollY = getScrollY();
        mScroller.startScroll(scrollX, scrollY, dx, dy);
        invalidate();
    }

    @Override
    public void computeScroll() {
        super.computeScroll();
        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            invalidate();
        }
    }
}

编辑:成卓

发布时间:2019-02-18 00:00:00

当前文章:http://www.radiokey.biz/array/96169.html

千禧棋牌怎么登录上不去 街机千炮捕鱼ol兑换码 att连环炮总代 平潭本地游16米官网 荣耀棋牌在哪里能下载? 比较好的德州扑克平台 皮皮麻将app软件 四川真人网络棋牌对战

94058 19670 12093 47094 26647 6581249050 83858 13601

责任编辑:纯徒成石