概述
由于移动平台屏幕尺寸大小的限制,为了给用户呈现更好的页面内容,我们需要通过滑动来实现一些页面内容的显示和隐藏操作。
自定义View的方法
- View.layout()方法
- 改变view的布局参数LayoutParams
- View.offsetLeftAndRight()和View.offsetTopAndBottom()方法
- 属性动画ObjectAnimator.ofFloat()方法
- 使用View动画
- View.scrollto()和View.scrollby()方法
- 各种方法的比较
例子
实现自定义view跟随屏幕的点击和拖动自动滑动:代码如下:
自定义view:滑动方法在redirectViewPosition中
package com.example.myscroller;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by pingkun.huang on 2016/4/21.
*/
public class MyView1 extends View{
public MyView1(Context context) {
super(context);
}
public MyView1(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView1(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void redirectViewPosition(float clickXPosition, float clickYPosition) {
int offsetX = (int) (clickXPosition - getLeft());
int offsetY = (int) (clickYPosition - getTop());
//-------第一种方法 调用View的layout()方法
layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY);
//-------第二种方法 改变View的布局参数
ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
marginLayoutParams.leftMargin = getLeft() + offsetX;
marginLayoutParams.topMargin = getTop() + offsetY;
//可以用requestLayout()或者setLayoutParams
setLayoutParams(marginLayoutParams);
//-------第三种方法
offsetLeftAndRight(offsetX);
offsetTopAndBottom(offsetY);
}
}
Activity:
package com.example.myscroller;
import android.animation.ObjectAnimator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Scroller;
public class MainActivity extends AppCompatActivity {
MyView1 myView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView1 = (MyView1) this.findViewById(R.id.hpk);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action)