继承自Spinner的自定义下拉列表框

本文介绍了一个自定义的下拉列表框,它允许用户自定义点击事件的响应动作,解决了原Spinner控件无法自定义点击事件响应的问题。
import android.content.Context;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Spinner;

/**
 * 继承自Spinner的自定义下拉列表框。该下拉列表有如下特点:
 * <ol>
 * <li>使用{@link #setOnClickMyListener(OnClickMyListener)}可监控点击事件,并可自行实现点击后的响应动作(原来Spinner的响应动作是打开列表选择框)。</li>
 * <li>点击事件发生后,默认不再打开列表选择框,如需打开,请调用{@link #performClick()}</li>
 * </ol>
 * 该控件的目地在于弥补Spinner对于点击事件不能自定义响应的不足,Spinner对应点击的响应有自己的内在方案,
 * 对外屏蔽了{@link #setOnClickListener(OnClickListener)}接口, 
 * 如果我们需要在点击控件后列表选择框出现前做某些事情(如:更新列表),
 * 那么我们发现用Spinner根本无从下手,此控件弥补了这些不足。在监控到点击事件后,我们可执行一些动作,
 * 动作执行完毕,只需要手动使用{@link #performClick()}显示列表选择框即可。
 * <p />
 * 
 * The class inherited from Spinner. The drop-down list has the following characteristics:
 * <ol>
 * <li> Use {@link #setOnClickMyListener(OnClickMyListener)} to listen the click event and can implement self-fulfilling click response action (Spinner's default response action is to open the list selection box). </ li>
 * <li> Click event occurs, the default response is no longer open the list selection box, please call {@link #performClick()} instead. </ li>
 * </ol>
 * The purpose of the control is to compensate for that Spinner click event can not be caught, the Spinner has its own solution with the click event response, 
 * and {@link #setOnClickListener(OnClickListener)} interface is shielded, 
 * if we need to do something (such as update list) after click event happened and before the list selection box appears,
 * we'll find no way, but ClickControlledSpinner did, it listens the click event, can let us perform some actions after this,
 * after actions finished, we must revoke {@link #performClick()} to display the list selection box.
 * 
 */
public class ClickControlledSpinner extends Spinner {

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

	public ClickControlledSpinner(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public ClickControlledSpinner(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	private boolean isMoved = false;
	private Point touchedPoint = new Point();
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		int x = (int) event.getRawX();
		int y = (int) event.getRawY();
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			touchedPoint.x = x;
			touchedPoint.y = y;
			break;
		case MotionEvent.ACTION_MOVE:
			isMoved = true;
			break;
		case MotionEvent.ACTION_UP:
			if (isMoved) {
				// 从上向下滑动
				if (y - touchedPoint.y > 20) {
				} 
				// 从下向上滑动
				else if (touchedPoint.y - y > 20) {
				}
				// 滑动幅度小时,当作点击事件
				else {
					onClick();
				}
				isMoved = false;
			} else {
				onClick();
			}
			break;
		default:
			break;
		}
		return true;
	}
	
	private void onClick() {
		if (onClickMyListener != null && isEnabled()) {
			// use a thread to do something which maybe spend many times.
			new Thread() {
				public void run() {
					onClickMyListener.onClick();
				}
			}.start();
		}
	}

	
	private OnClickMyListener onClickMyListener;
	
	/**
	 * 注册自定义的点击事件监听
	 * Register the click event self-fulfilling listener.
	 * @param onClickMyListener
	 */
	public void setOnClickMyListener(OnClickMyListener onClickMyListener) {
		this.onClickMyListener = onClickMyListener;
	}
	
	/**
	 * 自定义点击事件监听.
	 * Click event self-fulfilling listener.
	 * @author Wison Xu
	 */
	public interface OnClickMyListener {
		/**
		 * 点击时触发
		 * 警告:该方法在非UI线程中执行
		 * 
		 * Triggers when click event occurs.
		 * Warning: this method does not run in UI thread.
		 */
		public void onClick() ;
	}
}

内容概要:本文详细介绍了一个基于改进型鹈鹕优化算法(IPOA)优化模糊C均值聚类(FCM)的多特征分类预测项目,涵盖从数据预处理、特征工程到模型构建、优化、预测及结果可视化的完整流程。通过引入自适应权重、动态交叉和信息素引导机制,IPOA有效提升了FCM聚类的全局搜索能力与稳定性,克服了传统方法对初值敏感和易陷入局部最优的问题。项目还集成了并行计算、参数自适应调优、GUI界面设计等功能,实现了全流程自动化建模,并支持在金融风控、医疗健康、智能制造等多个领域应用。;适合人群:具备一定Python编程基础和机器学习知识的数据科学从业者、算法工程师及高校研究人员,尤其适合从事智能优化、聚类分析与分类预测相关工作的1-5年经验技术人员。;使用场景及目标:①解决高维多特征数据的聚类精度低、鲁棒性差问题;②提升复杂业务场景下的分类预测性能;③为金融、医疗、工业等领域的智能决策系统提供可解释性强、精度高的数据分析引擎;④支持从算法研发到工程部署的一体化实践。;阅读建议:建议读者结合文档中的代码示例与GUI设计部分进行动手实践,重点关注IPOA-FCM协同优化机制的实现逻辑与参数调优策略,同时可扩展学习多模态数据融合与分布式部署方向,以充分发挥该模型在实际项目中的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值