`
binggo2011
  • 浏览: 18681 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Android 自定义View 标识当前选中的控件

阅读更多

   一值有在用网上朋友贴出来的代码,很方便,也能学到很多东西.  这次我也贴点比较简单使用的小东西. 不怎么形容  有图有代码  自己看真想...

 

主体代码

 

package com.suncco.taoxie;

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

public class MyView extends View {
	private int count;
	private float space, radii;
	private int point_normal_color, point_seleted_color;

	// 选中
	private int selected = 0;

	// background seleted normal

	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		TypedArray a = context
				.obtainStyledAttributes(attrs, R.styleable.MyView);

		count = a.getInteger(R.styleable.MyView_count, 3);
		space = a.getDimension(R.styleable.MyView_space, 9);
		radii = a.getDimension(R.styleable.MyView_point_radii, 9);

		point_normal_color = a.getColor(R.styleable.MyView_point_normal_color,
				0x000000);
		point_seleted_color = a.getColor(
				R.styleable.MyView_point_seleted_color, 0xffff07);

		int sum = attrs.getAttributeCount();
		a.recycle();
	}

	public void setCount(int count) {
		this.count = count;
		invalidate();
	}

	public void next() {
		if (selected < count - 1)
			selected++;
		else
			selected = 0;
		invalidate();
	}

	public void previous() {
		if (selected > 0)
			selected--;
		else
			selected = count - 1;
		invalidate();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		Paint paint = new Paint();
		paint.setAntiAlias(true);
		// 起始位置,实现整体居中
		float w = canvas.getWidth() - (count * 2 * radii) - space * (count - 1);

		for (int i = 0; i < count; i++) {
			if (i == selected)
				paint.setColor(point_seleted_color);
			else
				paint.setColor(point_normal_color);
			canvas.drawCircle(w / 2.f + radii + i * (space + radii + radii),
					radii + 1, ((int) radii + 2) / 2, paint);
		}
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		setMeasuredDimension(widthMeasureSpec, (int) (radii * 2) + 2);
	}

	public void setSelected(int selectedId) {
		if (selectedId >= 0 && selectedId <= count)
			this.selected = selectedId;
		else if (selectedId < 0)
			this.selected = 0;
		else if (selectedId > count)
			this.selected = count;
		invalidate();
	}

}

 

自定义View 的自定义命名空间:

以下自定义属性  count: 总数, space: 每个点的距离大小之类的等等 名字取得都比较通俗了...

 

这个文件xml放在 value 下的  ***_attrs.xml  比如我这里去  haowuliaoa_attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<declare-styleable name="MyView">
		<attr name="count" format="integer" />  
		<attr name="space" format="dimension" />
		<attr name="point_size" format="dimension" />
		<attr name="point_seleted_color" format="color|reference" />
		<attr name="point_normal_color" format="color|reference" />
		<attr name="point_radii" format="dimension" />
	</declare-styleable>
</resources>
 

 

一切ok了, 可以直接在xml布局上应用咯...

 

 

首先要在布局的头 添加上自己的命名空间
xmlns:haowuliaoa="http://schemas.android.com/apk/res/自己的包名"
然后就是xml布局咯...
<包名.MyView android:id="@+id/myView"
	android:layout_width="fill_parent" android:layout_height="10dip"
	android:background="#00000000" android:gravity="center"
	android:layout_marginBottom="4dip" haowuliaoa_attrs:count="6" suncco:space="10dip"
	haowuliaoa_attrs:point_size="4dip" haowuliaoa_attrs:point_seleted_color="#ff0000"
	haowuliaoa_attrs:point_normal_color="#ffffff" haowuliaoa_attrs:point_radii="5dip" />

 

so 简单吧....

图片下面的小点就是今天的效果哦 很常用的

功能却是经常能用到的哦  ...

下面的小点就是今天要的效果哦, 很常用的吧.

分享到:
评论

相关推荐

    Android自定义adapter的listview

    以上就是关于“Android自定义adapter的listview”的主要知识点。自定义Adapter是Android开发中的核心技能之一,掌握好这一技巧,能帮助我们实现各种复杂的界面效果。通过不断实践和优化,我们可以在保证性能的同时,...

    自定义动态标识控件

    总之,自定义动态标识控件涉及到Android UI编程的多个方面,包括继承View类、绘制、事件处理、属性解析以及性能优化。通过不断实践和学习,开发者可以创造出更加丰富多样的用户界面,提升应用的整体体验。

    android自定义日历控件,点击提示,对应农历日期

    在Android开发中,自定义日历控件是一个常见的需求,特别是在设计具有个性化界面或特定功能的应用时。本项目聚焦于创建一个自定义的日历视图,不仅能够展示公历日期,还能显示对应的农历日期,并在用户点击日期时...

    Android自定义标签选择器TagView.zip

    `TagView`需要绘制每个标签的背景、文字以及选中状态的标识。 3. 实现触摸事件处理。自定义View需要监听用户的触摸操作,比如点击某个标签。我们可以重写`onTouchEvent()`方法,根据事件类型(ACTION_DOWN, ACTION_...

    ExpandableListView改变自定义ITEM及选中的View控制

    在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展开和折叠分组,每个分组下可以有多个子项。标题提到的是关于`ExpandableListView`的样式改造,尤其是如何去除默认的箭头图标并自定义选中状态...

    android轮播图控件

    本篇文章将深入探讨如何在Android中自定义一个轮播图控件,以实现图片的循环播放。 首先,我们需要创建一个新的布局文件,通常命名为`CarouselView.xml`,在这个布局文件中,我们会定义一个可以滚动的容器,如...

    GridView设置选中状态

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建列表或展示图片。在很多应用中,我们可能需要实现GridView的选中效果,包括设置默认选中项以及选中后的视觉反馈。...

    android 循环gallery 选中放大 按键控制

    `Gallery`的XML属性包括`android:id`用于标识控件,`android:layout_width`和`android:layout_height`定义其尺寸,`android:spacing`设置项目之间的间隔,以及`android:fadingEdgeLength`定义边缘淡出长度,提高视觉...

    Android Spinner 控件的使用

    在Android开发中,Spinner是一个非常实用的控件,它提供了下拉选择的功能,类似于iOS中的Picker View。在设计用户界面时,Spinner可以帮助我们提供一种紧凑的交互方式,尤其是在需要用户从多个选项中选择一个时。...

    Android-bannerDot贝塞尔圆点指示器

    贝塞尔圆点指示器通常由一组小圆点组成,表示轮播图中的各个页面,当前选中的页面会用一个特殊颜色或形状的圆点来标识。 首先,我们需要创建一个自定义View,继承自View或者ViewGroup。在这个自定义View中,我们...

    android 日历控件 实现日历月份切换,给某一天加标记等功能

    自定义日历控件通常涉及创建一个`View`或`ViewGroup`子类,比如继承自`LinearLayout`。你需要重写`onDraw()`方法来绘制日历的布局,包括月份标题、日期网格以及星期列。同时,利用`Calendar`类处理日期的计算和转换...

    数字标识控件.zip

    自定义控件涉及对View或ViewGroup的扩展,编写绘制逻辑、处理触摸事件等。这需要对安卓的UI框架有深入理解,但能实现更丰富的交互效果和独特的设计风格。 6. 数字标识控件的响应式设计 在不同分辨率和屏幕尺寸的...

    android MyGallery源码.rar

    自定义相册通常包含选择图片的功能,这涉及到状态管理,比如选中和未选中的图片标志,以及如何保存用户的选中状态。在MyGallery源码中,这部分逻辑可能体现在点击事件处理和数据模型的设计上。 通过对MyGallery...

    ListView被选中 出现选中颜色标示

    这里我们将深入探讨如何在Android中为ListView添加选中颜色标识,并提供一种实现方法。 1. **ListView的基础知识** - ListView是一种可滚动的视图容器,它可以显示一组可选中的项目列表。每个项目由一个ListView...

    Android树形控件绘制方法

    - `focus`:焦点标志,用于标识当前选中状态。 - `floor`:树的层级,用于确定节点在视图中的位置。 ```java public class TreeNode&lt;T&gt; { // ...(见给定文件的部分内容) } ``` 2. **构建树形Model** - ...

    自己写的日历控件

    总结,"自己写的日历控件"涉及到的知识点涵盖了Android自定义控件的设计与实现、日期逻辑处理、用户交互、视觉设计、性能优化等多个方面。通过深入理解这些技术,开发者可以创建出更加符合需求且用户体验优秀的日历...

    安卓 快速检索控件

    3. 布局设计:在UI布局文件中添加一个可滚动的字母条,通常是一个HorizontalScrollView或者自定义View,里面包含一个TextView数组,显示所有可能的首字母。 4. 监听事件:为字母条添加点击事件监听器,当用户点击...

    解决ListView嵌套CheckBox滑动时选中状态错乱

    在Android开发中,ListView是常用的数据展示控件,它可以有效地展示大量数据并实现滚动效果。然而,当ListView内部嵌套CheckBox等可交互组件时,常常会遇到一些问题,特别是滑动过程中选中状态错乱的现象。这个问题...

    自定义Toolbar布局+SegmentedGroup

    在Android中,我们可以使用`RadioGroup`或者自定义View来模拟这种效果。这里我们假设使用了一个名为`SegmentedGroup`的第三方库,如`com.h6ah4i.android.materialshadowninepatch:materialshadowninepatch:0.9.3`。 ...

    android studio开发app项目CheckBox应用

    `android:id`用于设置控件的唯一标识,`layout_width`和`layout_height`分别定义CheckBox的宽度和高度,`android:text`则设置CheckBox显示的文本内容。 接下来,我们需要在Java代码中获取CheckBox实例并设置监听器...

Global site tag (gtag.js) - Google Analytics