Android實現3D層疊式卡片

2021-10-14 11:39:33 字數 2909 閱讀 6487

整體實現思路

首先為了更好的展示我們重寫一下 relativelayout 編寫乙個鎖定寬高比例的 relativelayout

autoscalerelativelayout

public class autoscalerelativelayout extends relativelayout 

public autoscalerelativelayout(context context, attributeset attrs)

public autoscalerelativelayout(context context, attributeset attrs, int defstyleattr)

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

}

這樣我們就編寫好了我們想要的父布局

使用方法

接下來就是主要布局,也就是展示的布局了

為了實現滑動我們編寫乙個支援滑動的畫板

//事件處理

@override

public boolean dispatchtouchevent(motionevent ev)

return super.dispatchtouchevent(ev);

} /* touch事件的攔截與處理都交給mdraghelper來處理 */

@override

public boolean onintercepttouchevent(motionevent ev)

orderviewstack();

// 儲存初次按下時arrowfla**iew的y座標

// action_down時就讓mdraghelper開始工作,否則有時候導致異常

mdraghelper.processtouchevent(ev);

} return shouldintercept && moveflag;

} @override

public boolean ontouchevent(motionevent e) catch (exception ex)

return true;

} //計算

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

//定位

@override

protected void onlayout(boolean changed, int left, int top, int right,

int bottom)

viewitem.offsettopandbottom(offset);

viewitem.setscalex(scale);

viewitem.setscaley(scale);

} // 布局底部按鈕的view

if (null != bottomlayout)

// 初始化一些中間引數

initcenterviewx = viewlist.get(0).getleft();

initcenterviewy = viewlist.get(0).gettop();

childwith = viewlist.get(0).getmeasuredwidth();

} //onfinishinflate 當view中所有的子控制項均被對映成xml後觸發

@override

protected void onfinishinflate() else

} carditemview bottomcardview = viewlist.get(viewlist.size() - 1);

bottomcardview.setalpha(0);

}

private void initspring() 

});springy.addlistener(new ******springlistener()

});} //裝載資料

public void filldata(carddataitem itemdata)

/*** 動畫移動到某個位置

*/public void animto(int xpos, int ypos)

/*** 設定當前spring位置

*/private void setcurrentspringpos(int xpos, int ypos)

接下來我們需要使用它 編寫fragment布局

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

**中的使用

private void initview(view rootview) 

//type 0=右邊 ,-1=左邊

@override

public void oncardvanish(int index, int type)

@override

public void onitemclick(view cardview, int index)

};slidepanel.setcardswitchlistener(cardswitchlistener);

preparedatalist();

slidepanel.filldata(datalist);

} //封裝資料

private void preparedatalist()

} }

到此主要邏輯**就編寫完了

android 匯入 3d 場景

引用 android上的3d目前還是很少有人涉足的領域,雖然感覺效率上要差那麼一些,但相信不久以後會有很大改觀的,至少我覺得從它直接支援的是opengl,而不是令人詬病的j3d看來,還是很有前景的 今天做了一下android匯入3d場景,過程還算順利,就說下具體步驟 首先當然是有場景檔案,3dmax...

iOS實現3D旋轉

最近看到了乙個3d旋轉的動畫,就想著自己去實現以下。那麼,接下來就通過這邊文章記錄以下學習過程,慢慢深入了解以下3d旋轉。一 如何旋轉 每個view都在系統的座標系中,就手機螢幕來說,左上角為 0 0 向右橫向的為x軸正方向,向下縱向的為y軸正方向,垂直於手機螢幕的方向既z軸方向。所以z軸的旋轉屬於...

css js實現3D盒子

話不多說,直接上 lang en charset utf 8 rel shortcut icon href fk.png css3d盒子title html box keyframes xuanzhuan 100 box div front back left right top bottom st...