下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现view随触碰滑动效果
Android中怎么实现view随触碰滑动效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。布局文件里面就是一个Relativelayout中有一个ImageView。如下<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xingyi.moveviewwithtouch.MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@android:color/black"/>
</RelativeLayout>Java代码如下,这里考虑了边缘位置滑动的效果。如果考虑,在最左边缘imageView会有一半在屏幕之外,在最右边缘会缩小,直到看不见。package
com.xingyi.moveviewwithtouch;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.view.MotionEvent;
import
android.view.View;
import
android.widget.ImageView;
import
android.widget.RelativeLayout;
public
class
MainActivity
extends
AppCompatActivity
{
ImageView
imageView;
RelativeLayout
relativeLayout;
int
heightRL,widthRL;
int
halfHeight,halfWidth;
boolean
first=true;
private
int
widthImg;
private
int
heightImg;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
//初始化视图
private
void
initView()
{
imageView
=
(ImageView)
findViewById(R.id.imageView);
relativeLayout
=
(RelativeLayout)
findViewById(R.id.relativeLayout);
//获取滑动瞬间位置和点击瞬间位置,并移动imageview
relativeLayout.setOnTouchListener(new
View.OnTouchListener()
{
@Override
public
boolean
onTouch(View
view,
MotionEvent
motionEvent)
{
switch
(motionEvent.getAction())
{
case
MotionEvent.ACTION_MOVE:
moveView(imageView,
motionEvent.getX(),
motionEvent.getY());
break;
case
MotionEvent.ACTION_DOWN:
getWidthAndHeight();
moveView(imageView,
motionEvent.getX(),
motionEvent.getY());
break;
default:
break;
}
return
true;
}
});
}
//因为不能在初始化视图时获得长宽,而每次计算一次长宽又影响性能
private
void
getWidthAndHeight(){
if(first){
widthRL=relativeLayout.getWidth();
heightRL=relativeLayout.getHeight();
widthImg=imageView.getWidth();
heightImg=imageView.getHeight();
halfWidth
=
imageView.getWidth()
/
2;//imageView宽度的一半
halfHeight
=
imageView.getHeight()
/
2;//imageView高度的一半
first=false;
}
}
//滑动瞬间,将x和y分别作imageView的中心点到relativeLayout最左和顶端距离
private
void
moveView(View
view,
float
x,
float
y)
{
RelativeLayout.LayoutParams
params
=
(RelativeLayout.LayoutParams)
view.getLayoutParams();
//设置水平位置
if
(x
<
halfWidth)
{//左边缘
params.leftMargin
=
0;//设置imageview到左端距离为0
}
else
if
(x
>
widthRL-
halfWidth)
{
params.leftMargin
=
widthRL-widthImg;//设置imageview左端到左端端距离(params.rightMargin的性能非常糟糕)
}
else
{
params.leftMargin
=
(int)
(x
-
halfWidth);//imageview左端到relativelayout左端距离
}
//设置竖直位置
if
(y
<
halfHeight)
{
params.topMargin
=
0;
}
else
if
(y
>
heightRL
-
halfHeight)
{
params.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外研新版七年级下册《Module 5 Shopping Unit 3 Language in use》同步练习卷3
- 环保行业环境监测与治理系统建设方案
- 钢结构施工组织设计(预应力钢结构-拼装胎架)
- 快乐还是悲伤自己决定++教学设计 心理健康七年级上册
- 快乐学习+教学设计 心理健康九年级上册
- 企业资源规划(ERP)软件许可合同
- 企业网络设备资产信用担保合同
- 外刊改编语法填空题Day+77-Day+78- 高三英语一轮复习
- 企业绿色信用信用卡服务合同
- 高一地理 区域地理 2-10 澳大利亚 极地地区课后强化作业 新人教版
- 乳腺生物反应器在生物制药领域的研究进展
- 应急救护知识培训之淹溺
- (完整)生产能力证明材料
- 历年高中数学联赛真题分类汇编36不等式
- Unit2How+often+do+you+exercise大单元整体教学设计 人教版英语八年级年级上册
- 工程造价下浮率协议书
- 网络评论员培训课件
- 沟槽钢板桩支护工程施工方案
- GB/T 42554-2023计量器具环境试验的通用要求
- 重症监护室护理人员上岗准入资格
- 电力电子技术说课稿公开课一等奖市赛课获奖课件
评论
0/150
提交评论