android手势如何平移控件

 我来答
goole度娘
推荐于2016-09-08 · TA获得超过7469个赞
知道小有建树答主
回答量:1206
采纳率:83%
帮助的人:186万
展开全部
解决方案1:
重写该控件的onTouch方法,move状态设置该view的margin或者在放手状态up中设置不需要手势监听吧,在该方法中判断,是down状态记录按下的位置,控件移动一般都是相对布局
解决方案2:
ontounchListener监听事件
解决方案3:
scroller调用scrollTo
知识点延伸阅读:
控件平移划过屏幕(Scroller简单使用)
MainActivity如下:
package cc.cn;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
/
Demo描述:
Scroller使用示例——让控件平移划过屏幕

注意事项:
1 在布局中将cc.cn.LinearLayoutSubClass的控件的宽度设置为"fill_parent"
便于观察滑动的效果
/
public class MainActivity extends Activity {
private Button mButton;
private LinearLayoutSubClass mLinearLayoutSubClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}

private void init(){
mLinearLayoutSubClass=(LinearLayoutSubClass) findViewById(R.id.linearLayoutSubClass);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mLinearLayoutSubClass.beginScroll();
}
});
}

}
LinearLayoutSubClass如下:

package cc.cn;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.Scroller;
/**
* API注释:
*
* 1 //第一,二个参数起始位置;第三,四个滚动的偏移量;第五个参数持续时间
* startScroll(int startX, int startY, int dx, int dy, int duration)
*
* 2 //在startScroll()方法执行过程中即在duration时间内computeScrollOffset()
* 方法会一直返回true,但当动画执行完成后会返回返加false.
* computeScrollOffset()
*
* 3 当执行ontouch()或invalidate()或postInvalidate()均会调用该方法
* computeScroll()
*
*/
public class LinearLayoutSubClass extends LinearLayout {
private Scroller mScroller;
private boolean flag=true;

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

public LinearLayoutSubClass(Context context, AttributeSet attrs) {
super(context, attrs);
//也可采用该构造方法传入一个interpolator
//mScroller=new Scroller(context, interpolator);
mScroller=new Scroller(context);
}

@Override
public void computeScroll() {
super.computeScroll();
if(mScroller.computeScrollOffset()){
scrollTo(mScroller.getCurrX(), 0);
//使其再次调用computeScroll()直至滑动结束,即不满足if条件
postInvalidate();
}
}

public void beginScroll(){
if (flag) {
mScroller.startScroll(0, 0, -2500, 0, 2500);
flag = false;
} else {
mScroller.startScroll(0, 0, 0, 0, 1500);
flag = true;
}
//调用invalidate();使其调用computeScroll()
invalidate();
}

}
岌岌可危1
2014-01-13 · TA获得超过236个赞
知道答主
回答量:35
采纳率:0%
帮助的人:43.4万
展开全部
不需要手势监听吧,控件移动一般都是相对布局,重写该控件的onTouch方法,在该方法中判断,是down状态记录按下的位置,move状态设置该view的margin或者在放手状态up中设置。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
594214009
2014-01-11 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:120万
展开全部
ontounchListener监听事件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
码农朱哲
2014-01-11 · 超过11用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:37.3万
展开全部
scroller调用scrollTo
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式