频道栏目
首页 > 资讯 > Android > 正文

[Android]最省内存的ViewPager添加小圆点指示器

15-04-16        来源:[db:作者]  
收藏   我要投稿

原理:

这个你可以用View叠加来实现,但是这个效果不太理想,1占内存,而移植起来不方便,需要找各种资源,所以采用自己绘制更好,方便,而且效率高。

解决方案:

package com.youtu.view;

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<>> urls;

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

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

	public void setData(List<>> 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();
	}

}


相关TAG标签
上一篇:Android开发之Activity的生命周期
下一篇:Android声音焦点----从音乐回到Luncher调节音量显示的是Music的音量
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站