android填空题界面的代码,Android 使用代码实现一个选词(拖拽)填空题

1553170

封面

1.写在前面

在上一篇文章《Android 使用代码实现一个填空题》中,我们学习了如何实现一个填空题,今天继续接着上一篇文章的节奏,学习一下如何实现一个选词填空题,由于本文中用到了一些上篇文章中的知识点,还没有看过上篇文章的同学可以>戳这里

首先看下效果图:

1553170

拖拽填空题

2.学习一些基础知识

选词填空题有一个很重要的功能就是拖拽,我们先来学习一下如何对View进行拖拽操作,写个简单的Demo来学习下:

public class DragActivity extends BaseActivity implements View.OnDragListener {

@Bind(R.id.tv_tip)

TextView tvTip;

@Bind(R.id.rl_container)

RelativeLayout rlContainer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_drag);

ButterKnife.bind(this);

// 目标区域设置拖拽事件监听

rlContainer.setOnDragListener(this);

}

@OnTouch(R.id.iv_icon)

public boolean onTouch(View v) {

ClipData.Item item = new ClipData.Item("我来了");

ClipData data = new ClipData(null, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item);

v.startDrag(data, new View.DragShadowBuilder(v), null, 0);

return true;

}

@Override

public boolean onDrag(View v, DragEvent event) {

final int action = event.getAction();

switch (action) {

case DragEvent.ACTION_DRAG_STARTED: // 拖拽开始

Log.i("拖拽事件", "拖拽开始");

return event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);

case DragEvent.ACTION_DRAG_ENTERED: // 被拖拽View进入目标区域

Log.i("拖拽事件", "被拖拽View进入目标区域");

return true;

case DragEvent.ACTION_DRAG_LOCATION: // 被拖拽View在目标区域移动

Log.i("拖拽事件", "被拖拽View在目标区域移动___X:" + event.getX() + "___Y:" + event.getY());

tvTip.setText("X:" + event.getX() + " Y:" + event.getY());

return true;

case DragEvent.ACTION_DRAG_EXITED: // 被拖拽View离开目标区域

Log.i("拖拽事件", "被拖拽View离开目标区域");

return true;

case DragEvent.ACTION_DROP: // 放开被拖拽View

Log.i("拖拽事件", "放开被拖拽View");

// 释放拖放阴影,并获取移动数据

ClipData.Item item = event.getClipData().getItemAt(0);

String content = item.getText().toString();

Toast.makeText(this, content, Toast.LENGTH_SHORT).show();

return true;

case DragEvent.ACTION_DRAG_ENDED: // 拖拽完成

Log.i("拖拽事件", "拖拽完成");

return true;

default:

break;

}

return false;

}

}

看下效果:

1553170

拖拽

看下打印信息:

1553170

打印信息

首先给被拖拽View设置一个触摸事件,在onTouch方法中定义一个ClipData对象,传入文本类型的数据“我来了”,当触摸被拖拽View时调用View的startDrag方法开始移动View,此时移动的是被拖拽View的“影子”。

View可以移动了,还需要为它设置一个目标区域,调用目标区域View的setOnDragListener方法设置拖拽事件的监听,实现onDrag方法,在ACTION_DRAG_STARTED(拖拽开始)时判断当前接收的是不是文件类型的数据,如果不是则返回false,不再响应拖拽事件,在ACTION_DROP(放开被拖拽View)时,释放拖拽阴影,并获取传递过来的数据,通过Toast显示出来。

3.实现

首先初始化一些数据

public class DragFillBlankView extends RelativeLayout implements View.OnDragListener,

View.OnLongClickListener {

private TextView tvContent;

private LinearLayout llOption;

// 初始数据</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值