安卓上下左右的阻尼效果

2021-09-29 07:43:42 字數 4469 閱讀 9714

直接上**就不廢話了: 先上左右阻尼的;

package com.example.sunchip.view;

/** * created by administrator on 2019/10/31.

*/import android.util.log;

import android.view.view;

import android.widget.horizontalscrollview;

import android.content.context;

import android.graphics.rect;

import android.util.attributeset;

import android.view.motionevent;

import android.view.animation.translateanimation;

public class horizontalfeaturescrollview extends horizontalscrollview

/*** 基於xml生成的檢視所做的工作。

* 建立上次呼叫的檢視中的函式。

* 新增所有子檢視後。

*/@override

protected void onfinishinflate()

}/**

* 觸控事件處理

**/@override

public boolean ontouchevent(motionevent ev)

return super.ontouchevent( ev );

}@override

public boolean onintercepttouchevent(motionevent ev)

}return super.onintercepttouchevent( ev );

}/**

* 滑動事件(讓滑動速度變成原來的1/2)

*/@override

public void fling(int velocityy)

/***

* 觸控事件

** @param ev

*/public void commontouchevent(motionevent ev)

break;

/*** 不包括第一次移動計算。

* 因為第一次不能知道y座標。

* 在motionevent.action_down中不獲取。

* 因為這一次是傳遞給上述listview子項的myscrollview touch事件。

* 所以從第二次計算,但我們也必須初始化。

* 就是這樣。第一次將滑動距離移動到0。

* 以後記錄準確就可以正常執行了。

*/case motionevent.action_move:

final float prex = x;// 當按下y座標時

float nowx = ev.getx();// 總協調員

int deltax = (int) (nowx - prex);// 滑動距離

if (!iscount)

// 當滾動到頂部或最上面時,它將不滾動,然後移動布局。

isneedmove();

if (ismoveing)

log.e( "tag", " " + deltax / size );

// 移動布局

inner.layout( inner.getleft() + deltax / size, inner.gettop(),

inner.getright() + deltax / size, inner.getbottom() );

left += (deltax / size * 2);

}iscount = true;

x = nowx;

break;

default:

break;}}

/*** 縮回動畫

*/public void animation()

// 是否需要啟用動畫

public boolean isneedanimation()

/***

* 是否需要將布局移到內部。getmeasuredheight():獲取控制項的總高度

* get height():獲取螢幕的高度。

* @return

*/public void isneedmove()

}public void setcontextview(view view)

}

再上上下的:

package com.example.sunchip.view;

/** * created by administrator on 2019/10/31.

*/import android.util.log;

import android.widget.scrollview;

import android.content.context;

import android.graphics.rect;

import android.util.attributeset;

import android.view.motionevent;

import android.view.view;

import android.view.animation.translateanimation;

public class verticaldampenscrollview extends scrollview

private scrollviewchangelistener changelistener = null;

public void setchangelistener(scrollviewchangelistener changelistener)

public inte***ce scrollviewlistener

private scrollviewlistener scrollviewlistener = null;

public void setscrollviewlistener(scrollviewlistener scrollviewlistener)

public verticaldampenscrollview(context context)

public verticaldampenscrollview(context context, attributeset attrs)

@override

protected void onfinishinflate()

}@override

public boolean ontouchevent(motionevent ev) else

return super.ontouchevent( ev );

}public void commontouchevent(motionevent ev)

}break;

case motionevent.action_move:

final float prey = y;

float nowy = ev.gety();

int deltay = (int) (prey - nowy) / size;

y = nowy;

// 當滾動到頂部或最上面時,它將不滾動,然後移動布局。

if (isneedmove())

int yy = inner.gettop() - deltay;

if (yy < -100) else

if (yy > 0)

log.e( "tag", yy + " " +deltay );

// 移動布局

inner.layout( inner.getleft(), yy, inner.getright(),

inner.getbottom() - deltay );

}break;

default:

break;}}

//啟用要移動的動畫

public void animation()

// 是否需要啟用動畫

public boolean isneedanimation()

// 是否需要移動布局

public boolean isneedmove()

return false;

}@override

protected void onscrollchanged(int x, int y, int oldx, int oldy)

}}

使用方法:

<?xml version="1.0" encoding="utf-8"?>

如果你不想使用兩個,你可以把兩個自定義控制項的**合併,這兩個自定義檔案的**並不衝突!

Flex4之動畫效果 上下,左右擦掉效果

首先介紹從左到右的效果,這個是屬於flex4的effects動畫效果。使影象從左到右隱藏效果,呵呵,不用多說,貼上 xmlns s library xmlns mx library minwidth 955 minheight 600 下面我在介紹上下擦掉效果 如下所示 xmlns s librar...

上下左右居中的方法總結

居中的方法有很多,比較難的是選擇合適的方法。今天搜了一下,總結一下各種居中方法的優缺點。演示效果 使用flexbox伸縮盒布局 優點 缺點 缺點 現在比較常用的方法,top設定為50 然後margin top設定成 自身高度的一半 優點 缺點 移動裝置上經常會用到,特別是當你不知道父容器的大小和自身...

實現div的上下左右都居中

把 綠色那個div 上下頁居中 讓層垂直居中於瀏覽器視窗 其實解決的思路是這樣的 首們需要position absolute 絕對定位。而層的定位點,使用外補丁margin負值的方法。負值的大小為層自身寬度高度除以二。如 乙個層寬度是400,高度是300。使用絕對定位距離上部與左部都設定成50 而m...