Android最省內存的ViewPager添加小圓點指示器

jopen 9年前發布 | 3K 次閱讀 Java Android

這個你可以用View疊加來實現,但是這個效果不太理想,1占內存,而移植起來不方便,需要找各種資源,所以采用自己繪制更好,方便,而且效率高。


import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;

public class ADView extends ViewPager {

AdAdapter mAdAdapter;  
Context context;  
Paint paint;  
List<Map<String, String>> urls;  

public ADView(Context context, AttributeSet attrs) {  
    super(context, attrs);  
    this.context = context;  
    paint = new Paint();  
    InitAdapter();  
}  

private void InitAdapter() {  
    urls = new ArrayList<Map<String, String>>();  
    mAdAdapter = new AdAdapter(context, urls);  
    this.setAdapter(mAdAdapter);  
}  

public void setData(List<Map<String, String>> data) {  
    urls.clear();  
    for (int i = 0; i < data.size(); i++) {  
        urls.add(data.get(i));  
    }  
    if(urls.size()>0){  
        this.setVisibility(View.VISIBLE);  
    }else{  
        this.setVisibility(View.GONE);  
    }  
    mAdAdapter.notifyDataSetChanged();  
}  

@Override  
public void draw(Canvas canvas) {  
    super.draw(canvas);  
    drawCycle(canvas);  
}  

private void drawCycle(Canvas canvas) {  
    canvas.save();  
    canvas.translate(getScrollX(), getScrollY());  
    int count = 0;  
    if (this.getAdapter() != null) {  
        count = this.getAdapter().getCount();  
    }  
    int select = getCurrentItem();  
    float density = getContext().getResources().getDisplayMetrics().density;  
    int itemWidth = (int) (11 * density);  
    int itemHeight = itemWidth / 2;  
    int x = (getWidth() - count * itemWidth)/2;  
    int y = getHeight() - itemWidth;  
    int minItemHeight = (int) ((float) itemHeight * 0.8F);  
    paint.setAntiAlias(true);  

    paint.setStyle(Style.FILL);  
    for (int i = 0; i < count; i++) {  
        if (select == i) {  
            paint.setColor(0xFFbdbdbd);  
            canvas.drawCircle(x + itemWidth * i + itemWidth / 2, y, minItemHeight, paint);  
        } else {  
            paint.setColor(0xFFe6e6e6);  
            canvas.drawCircle(x + itemWidth * i + itemWidth / 2, y, minItemHeight, paint);  
        }  
    }  
    canvas.restore();  
}  

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!