android 广告轮播小圆点封装

源码如下:

package com.shouwei.csdn.customview;


import com.shouwei.csdn.R;


import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;


/**
 * 启动页小圆点
 * 
 * @author sw
 * @date 2015-6-8
 */
public class SelectPointView extends View {
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 小圆点的总数量
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private int count = 4, position = 0;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 小圆点点击事件回调
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private OnPointSelectListener listener;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 画笔
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private Paint paint = new Paint();
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 小圆点选中与未选中时的背景
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private Bitmap selected, unselect;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 所画小圆点Y坐标起点,X坐标起点,单个小圆点的宽度,整个VIEW的宽度与高度
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private float drawHeight, drawWidth, singleWidth, width, height,radius=0;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 是否自己创建bitmap
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private boolean isCreateBitmap = false;


<span style="white-space:pre">	</span>public SelectPointView(Context context, int count) {
<span style="white-space:pre">		</span>super(context);
<span style="white-space:pre">		</span>this.count = count;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public SelectPointView(Context context, AttributeSet attr) {
<span style="white-space:pre">		</span>super(context, attr);
<span style="white-space:pre">		</span>TypedArray ta = context.obtainStyledAttributes(attr, R.styleable.SelectPointView);
<span style="white-space:pre">		</span>int typeCount = ta.getIndexCount();
<span style="white-space:pre">		</span>for (int i = 0; i < typeCount; i++) {
<span style="white-space:pre">			</span>int id = ta.getIndex(i);
<span style="white-space:pre">			</span>switch (id) {
<span style="white-space:pre">			</span>// 小圆点的数量
<span style="white-space:pre">			</span>case R.styleable.SelectPointView_pointcount:
<span style="white-space:pre">				</span>count = ta.getInteger(id, 0);
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">			</span>// 小圆点选中时的背景
<span style="white-space:pre">			</span>case R.styleable.SelectPointView_selectpic:
<span style="white-space:pre">				</span>selected = BitmapFactory.decodeResource(getResources(), ta.getResourceId(id, 0));
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">			</span>// 小圆点未选中时的背景
<span style="white-space:pre">			</span>case R.styleable.SelectPointView_unselectpic:
<span style="white-space:pre">				</span>unselect = BitmapFactory.decodeResource(getResources(), ta.getResourceId(id, 0));
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">			</span>default:
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}


<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>protected void onDraw(Canvas canvas) {
<span style="white-space:pre">		</span>super.onDraw(canvas);
<span style="white-space:pre">		</span>//设置抗锯齿
<span style="white-space:pre">		</span>paint.setAntiAlias(true);
<span style="white-space:pre">		</span>width = getWidth();
<span style="white-space:pre">		</span>height = getHeight();
<span style="white-space:pre">		</span>if (selected == null||unselect==null) {
<span style="white-space:pre">			</span>isCreateBitmap = true;
<span style="white-space:pre">			</span>if (width/count>=height) {
<span style="white-space:pre">				</span>radius=height/2*2/3;
<span style="white-space:pre">			</span>}else{
<span style="white-space:pre">				</span>radius=width/count/2*2/3;
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}else{
<span style="white-space:pre">			</span>drawHeight = getHeight() / 2 - (selected.getHeight() / 2);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>Log.i("savion", "radius==="+radius);
<span style="white-space:pre">		</span>if (count != 0) {
<span style="white-space:pre">			</span>singleWidth = width / count;
<span style="white-space:pre">			</span>for (int i = 0; i < count; i++) {
<span style="white-space:pre">				</span>if (!isCreateBitmap) {
<span style="white-space:pre">					</span>drawWidth = (i + 1) * singleWidth - singleWidth / 2 - selected.getWidth() / 2;
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>//是否使用自己创建的bitmap
<span style="white-space:pre">				</span>if (isCreateBitmap) {
<span style="white-space:pre">					</span>if (i == position) {
<span style="white-space:pre">						</span>paint.setColor(Color.RED);
<span style="white-space:pre">						</span>canvas.drawCircle((i+1)*singleWidth-singleWidth/2, height/2, radius, paint);
<span style="white-space:pre">					</span>} else {
<span style="white-space:pre">						</span>paint.setColor(Color.YELLOW);
<span style="white-space:pre">						</span>canvas.drawCircle((i+1)*singleWidth-singleWidth/2, height/2, radius, paint);
<span style="white-space:pre">					</span>}
<span style="white-space:pre">				</span>} else {
<span style="white-space:pre">					</span>if (i == position) {
<span style="white-space:pre">						</span>canvas.drawBitmap(selected, drawWidth, drawHeight, paint);
<span style="white-space:pre">					</span>} else {
<span style="white-space:pre">						</span>canvas.drawBitmap(unselect, drawWidth, drawHeight, paint);
<span style="white-space:pre">					</span>}
<span style="white-space:pre">				</span>}
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public boolean onTouchEvent(MotionEvent event) {


<span style="white-space:pre">		</span>int currentPos = (int) (event.getX() / getWidth() * count);
<span style="white-space:pre">		</span>if (event.getAction() == MotionEvent.ACTION_UP) {
<span style="white-space:pre">			</span>listener.onPointSelect(currentPos);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置数量
<span style="white-space:pre">	</span> * @auth shouwei
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setCount(int c){
<span style="white-space:pre">		</span>count=c;
<span style="white-space:pre">		</span>invalidate();
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置被选中时的小圆背景
<span style="white-space:pre">	</span> * @auth shouwei
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setSelectPic(Bitmap bit) {
<span style="white-space:pre">		</span>selected = bit;
<span style="white-space:pre">		</span>if (selected!=null&&unselect!=null) {
<span style="white-space:pre">			</span>isCreateBitmap=false;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>invalidate();
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置未被选中时的背景
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param bit
<span style="white-space:pre">	</span> * @auth shouwei
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setUnSelectPic(Bitmap bit) {
<span style="white-space:pre">		</span>unselect = bit;
<span style="white-space:pre">		</span>if (unselect!=null&&selected!=null) {
<span style="white-space:pre">			</span>isCreateBitmap=false;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>invalidate();
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置当前被选中小圆点position
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param position
<span style="white-space:pre">	</span> * @auth shouwei
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setPosition(int position) {
<span style="white-space:pre">		</span>this.position = position;
<span style="white-space:pre">		</span>invalidate();
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置监听
<span style="white-space:pre">	</span> * @param l
<span style="white-space:pre">	</span> * @auth shouwei
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public void setOnPointSelectListener(OnPointSelectListener l) {
<span style="white-space:pre">		</span>this.listener = l;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public interface OnPointSelectListener {
<span style="white-space:pre">		</span>public void onPointSelect(int position);
<span style="white-space:pre">	</span>}
}
接下来是在values文件夹下新建一个attrs文件,写入自定义属性,如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 声明属性级的名称 -->
    <declare-styleable name="SelectPointView">
        <!-- 声明一个属性,整型 -->
        <!-- 声明一个属性,字符串 -->
        <!-- 声明一个属性,引用,引用资源id -->
        <!-- 小圆点的个数 -->
        <attr name="pointcount" format="integer"/>
        <!-- 被选中圆点有资源图片 -->
        <attr name="selectpic" format="reference"/>
        <!-- 未被选中小圆点的资源图片 -->
        <attr name="unselectpic" format="reference"/>
   </declare-styleable>
</resources>
之后可以在类文件中设置小圆点的点击监听,设置圆点个数与圆点资源图片。

当配置文件与类文件中都不设置资源图片时,会默认画一个黑色与灰色的圆点代表选中与未选中。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值