仿蘋果彈性布局

2022-02-17 18:25:29 字數 2606 閱讀 8400

在android開發中,常常會要求ios應用和android應用的體驗一致,所以對應android中開發時,很多控制項就需要開發人員自己定義,下面就為大家分享乙個仿蘋果的彈性滑動scrollview。

bouncescrollview原始碼:

package com.joke.widget;

import android.content.context;

import android.graphics.rect;

import android.os.build;

import android.util.attributeset;

import android.view.motionevent;

import android.view.view;

import android.view.animation.translateanimation;

import android.widget.scrollview;

/** * scrollview**效果的實現

*/public class bouncescrollview extends scrollview

}/***

* 根據 xml 生成檢視工作完成.該函式在生成檢視的最後呼叫,在所有子檢視新增完之後. 即使子類覆蓋了 onfinishinflate

* 方法,也應該呼叫父類的方法,使該方法得以執行.

*/@override

protected void onfinishinflate()

}/***

* 監聽touch

*/@override

public boolean ontouchevent(motionevent ev)

return super.ontouchevent(ev);

}/***

* 觸控事件

* * @param ev

*/public void commontouchevent(motionevent ev)

break;

/***

* 排除出第一次移動計算,因為第一次無法得知y座標, 在motionevent.action_down中獲取不到,

* 因為此時是myscrollview的touch事件傳遞到到了listview的孩子item上面.所以從第二次計算開始.

* 然而我們也要進行初始化,就是第一次移動的時候讓滑動距離歸0. 之後記錄準確了就正常執行.

*/case motionevent.action_move:

final float prey = y;// 按下時的y座標

float nowy = ev.gety();// 時時y座標

int deltay = (int) (prey - nowy);// 滑動距離

if (!iscount)

y = nowy;

// 當滾動到最上或者最下時就不會再滾動,這時移動布局

if (isneedmove())

// log.e("jj", "矩形:" + inner.getleft() + "," + inner.gettop()

// + "," + inner.getright() + "," + inner.getbottom());

// 移動布局

inner.layout(inner.getleft(), inner.gettop() - deltay / 2, inner.getright(), inner.getbottom() - deltay / 2);

}iscount = true;

break;

default:

break;}}

/***

* 回縮動畫

*/public void animation()

// 是否需要開啟動畫

public boolean isneedanimation()

/***

* 是否需要移動布局 inner.getmeasuredheight():獲取的是控制項的總高度

* * getheight():獲取的是螢幕的高度

* * @return

*/public boolean isneedmove()

return false;}}

使用說明:

1、直接將bouncescrollview放到*.widget包中

2、在布局檔案中直接使用bouncescrollview包裹其他布局

...

值得注意的是:bouncescrollview是直接繼承自scrollview的,那麼bouncescrollview也需要遵循scrollview的約定,它內部只允許有乙個子view,所以其他布局需要使用乙個viewgroup來包裹。

另外:還可以給bouncescrollview加上背景,使用:android:background="@drawable/coversation_bg"

例如:coversation_bg.xml還可以實現的疊加效果

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

flex布局(彈性布局)

flex是flexible box的縮寫,意為 彈性布局 用來為盒狀模型提供最大的靈活性。任何乙個容器都可以指定為flex布局。box行內元素也可以使用flex布局。boxwebkit核心的瀏覽器,必須加上 webkit字首。box注意,設為flex布局以後,子元素的float clear和vert...

Flex布局(彈性布局)

flex是flex box的縮寫,即彈性布局。任何乙個容器都可以指定為flex布局。行內元素也可以使用flex布局。webkit核心的瀏覽器,必須加上 webkit字首。box.box.box注意 設為flex布局以後,子元素的float clear和vertical align屬性將失效。採用fl...

Flex布局 彈性布局

1.flex direction flex direction屬性決定主軸的方向 即專案的排列方向 flex direction row row reverse column column reverse 2.flex wrap 預設情況下,專案都排在一條線 又稱 軸線 上。flex wrap屬性定...