簡體   English   中英

如何制作圓形滾動列表視圖? -安卓

[英]How to make a Circular Shaped scrolling listview ? - Android

(寫完之后,我意識到這個問題對大多數人來說太大了。如果您能信服我為什么要發布一個看似重復的問題,請繼續閱讀最后一部分!)

圓形ListView(半圓上的項目)

在此處輸入圖片說明

上面的鏈接將您帶到幾乎完全相同的問題,以及我們倆都想做的事情,(我,這里和那個鏈接上的人)...實現了字面上的圓形ListView-參見圖片。 就是這樣

為什么我再問這個問題? 這個問題已經有將近6個月的時間了,所以我不可能希望與回答/詢問的人聯系(我嘗試過)。

此外,問題的答案給出了正確的答案-完全正常。 但是,它需要API 11 + ..考慮到現有應用程序用戶的約30%在API 11以下,因此我需要至少為API 8 +創建此確切的列表視圖...

簡短說明該答案中的人正在做什么:

以下是自定義textview:

public class MyView extends TextView {

    private static final int MAX_INDENT = 300;
    private static final String TAG = MyView.class.getSimpleName();

    public MyView(Context context) {
        super(context);
    }

    public void onDraw(Canvas canvas){
        canvas.save();
        float indent = getIndent(getY());
        canvas.translate(indent, 0);
        super.onDraw(canvas);
        canvas.restore();
    }

    public float getIndent(float distance){
        float x_vertex = MAX_INDENT;
        DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
        float y_vertex = displayMetrics.heightPixels / 2 / displayMetrics.density;
        double a = ( 0 - x_vertex ) / ( Math.pow(( 0 - y_vertex), 2) ) ;
        float indent = (float) (a * Math.pow((distance - y_vertex), 2) + x_vertex);
        return indent;
    }
}

這是列表視圖:

public class HalfCircleListView extends ListView implements AbsListView.OnScrollListener {
    public HalfCircleListView(Context context) {
        super(context);
        setOnScrollListener(this);
    }


    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {
        //Ignored
    }

    @Override
    public void onScroll(AbsListView absListView, int i, int i2, int i3) {
        absListView.invalidateViews();
    }
}

基本上,他要找出拋物線上的點,在那兒放置一個列表項,然后繼續,檢查此textview的當前位置,將其與其他textview(在其后的)進行比較,然后將其相應放置。

很簡單...我的問題實際上並不大。

這是問題所在:

public void onDraw(Canvas canvas){
    canvas.save();
    float indent = getIndent(getY());
    //Part of the magic happens here too
    canvas.translate(indent, 0);
    super.onDraw(canvas);
    canvas.restore();
}

問題很大,但我的問題只有一行:

float indent = getIndent(getY());

getY(); 函數需要最低API 11+。 API 8 +是否有相同的功能?

另外,有沒有更好的方法來實現呢? (如果您不願閱讀代碼:-D)如果您知道任何其他性感的自定義列表視圖,請在此處發布。

任何輸入將不勝感激。 謝謝 !

getTop()怎么樣? getY()等同於translationY屬性加上當前的top屬性,假設您的目標API低於11,則由於setTrnaslationY函數也是API 11+的事實,translationY應該保持不變。 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM