在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屬性定...