Android--自定义View滑动的六种方法

概述

由于移动平台屏幕尺寸大小的限制,为了给用户呈现更好的页面内容,我们需要通过滑动来实现一些页面内容的显示和隐藏操作。

自定义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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值