public class TestActivity extends AppCompatActivity {
private ImageView iv1;
private float downX;
private float downY;
private int screenWidth;
private int screenHeight;
private int actionBarHeight = 0;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_boll_free_fall);
screenWidth= getDispaly(this).widthPixels;
screenHeight= getDispaly(this).heightPixels;
iv1 = findViewById(R.id.iv_1);
iv1.post(new Runnable() {
@Override
public void run() {
if(getSupportActionBar() != null){
actionBarHeight = getSupportActionBar().getHeight();
Log.d("xiazhenjie","actionBarHeight--" + actionBarHeight);
}
}
});
iv1.setOnTouchListener((v, event) -> {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
Log.e("kid","ACTION_MOVE");
final float xDistance = event.getX() - downX;
final float yDistance = event.getY() - downY;
int l, r, t, b;
//当水平或者垂直滑动距离大于10,才算拖动事件
if (Math.abs(xDistance) > 10 || Math.abs(yDistance) > 10) {
l = (int) (iv1.getLeft() + xDistance);
r = l + iv1.getWidth();
t = (int) (iv1.getTop() + yDistance);
b = t + iv1.getHeight();
//不划出边界判断,此处应按照项目实际情况,因为本项目需求移动的位置是手机全屏,
// 所以才能这么写,如果是固定区域,要得到父控件的宽高位置后再做处理
if(l < 0){
l = 0;
r = l + iv1.getWidth();
}else if(r > screenWidth){
r = screenWidth;
l = r - iv1.getWidth();
}
if(t < 0){
t = 0;
b = t + iv1.getHeight();
}else if(b > screenHeight - actionBarHeight){//如果有Actionbar,也需要考虑其高度
b = screenHeight - actionBarHeight;
t = b - iv1.getHeight();
}
iv1.layout(l, t, r, b);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
iv1.setPressed(false);
break;
}
return true;
});
}
public static DisplayMetrics getDispaly(Context context){
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm;
}
}
Android 在页面任意拖动View
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 上一篇讲到通过通过goolge官方的ViewDragHelper工具实现拖动的方法(上一篇见http://www....
- 需求是需要在一个已经存在的页面添加一个可拖动的浮层广告。使用到的技术:ViewDragHelper 效果如图: 封...
- 项目需求:过程中要实现能在页面中随意的拖动,刚开始实现是用悬浮球的形式进行实现,因为之前项目中用过,实现后发现用户...
- 因为赶项目本人停更两个月 从今天开始又可以更新了 今天说一下这个可随意拖动的view 简单说一下这个view效果...