- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我实现触摸时我有两个 ImageView 只有一个 View 能够移动整个布局但其他 ImageView 保持在固定位置我们如何让其他 ImageView 从一个地方移动到其他如果它没有放置多 View 移动的代码请帮助plz.. friend
最佳答案
我很久以前写过这段代码,看看它是否适合你
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class DragAndDropActivity extends Activity {
public FrameLayout board;
int dropZone1_X, dropZone2_X, dropZone3_X, dropZone1_Y, dropZone2_Y,
dropZone3_Y, movingCoordinateLeft = 0, movingCoordinateTop = 0;
int windowHeight, windowWidth, defaultMargin = 150;
ImageView answerOption1, answerOption2, answerOption3, dropZone1,
dropZone2, dropZone3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
board = new FrameLayout(this);
setContentView(R.layout.layout);
/*
* set id's of view objects
*/
setIds();
/*
* set on touch listener
*/
setOnTouchListener();
/*
* get window dimensions
*/
getWindowDimensions();
}
private void setOnTouchListener() {
// TODO Auto-generated method stub
answerOption1.setOnTouchListener(dragt);
answerOption2.setOnTouchListener(dragt);
answerOption3.setOnTouchListener(dragt);
}
private void setIds() {
// TODO Auto-generated method stub
board = (FrameLayout) findViewById(R.id.Board);
// ids for answer options
answerOption1 = (ImageView) findViewById(R.id.answer_option_1);
answerOption2 = (ImageView) findViewById(R.id.answer_option_2);
answerOption3 = (ImageView) findViewById(R.id.answer_option_3);
// ids for drop zones
dropZone1 = (ImageView) findViewById(R.id.frame1);
dropZone2 = (ImageView) findViewById(R.id.frame2);
dropZone3 = (ImageView) findViewById(R.id.frame3);
}
/*
*
* Get default view dimensions at run time
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
System.out.println("Method--onWindowFocusChanged");
System.out.println("\n\nFirst drop zone dimensions");
System.out.println("left margin-->" + dropZone1.getLeft());
System.out.println("top margin-->" + dropZone1.getTop());
System.out.println("\n\nSecond drop zone dimensions");
System.out.println("left margin-->" + dropZone2.getLeft());
System.out.println("top margin-->" + dropZone2.getTop());
System.out.println("\n\nThird drop zone dimensions");
System.out.println("left margin-->" + dropZone3.getLeft());
System.out.println("top margin-->" + dropZone3.getTop());
}
}
private void getWindowDimensions() {
// TODO Auto-generated method stub
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
windowHeight = metrics.heightPixels;
System.out.println("window height" + windowHeight);
windowWidth = metrics.widthPixels;
System.out.println("window width" + windowWidth);
}
// onCreate
OnTouchListener dragt = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
FrameLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
switch (v.getId()) {// What is being touched
/***
*
* Answer option 1
*
* ***/
case R.id.answer_option_1: {
// Which action is being taken
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
par.topMargin = (int) event.getRawY()
- (v.getHeight() + 22);
par.leftMargin = (int) event.getRawX()
- (v.getWidth() / 2 + 150);
movingCoordinateLeft = (int) event.getRawX()
- (v.getWidth() / 2 + 0);
movingCoordinateTop = par.topMargin;
System.out.println("Answer 1 --- left"
+ movingCoordinateLeft + "---top"
+ movingCoordinateTop);
v.setLayoutParams(par);
break;
}// inner case MOVE
case MotionEvent.ACTION_UP: {
par.height = 40;
par.width = 40;
/*
* par.topMargin = (int) event.getRawY() - (v.getHeight() +
* 15); par.leftMargin = (int) event.getRawX() -
* (v.getWidth() / 2 + 90);
*/
if (windowHeight < 460) {
par.topMargin = 109;
par.leftMargin = 0;
par.height = 22;
par.width = 105;
} else {
par.topMargin = defaultMargin;
par.leftMargin = 0;
}
// check if co-ordinates matched and drop answer in drop
// zone
if ((movingCoordinateLeft > 10 && movingCoordinateLeft < 80)
&& (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {
System.out.println("left " + movingCoordinateLeft
+ "top " + movingCoordinateTop);
dropZone1.setImageDrawable(getResources().getDrawable(
R.drawable.duck));
answerOption1.setVisibility(View.INVISIBLE);
}
v.setLayoutParams(par);
break;
}// inner case UP
case MotionEvent.ACTION_DOWN: {
System.out.println("left" + event.getRawX());
System.out.println("top" + event.getRawY());
if (windowHeight < 460) {
par.height = 40;
par.width = 40;
} else {
par.height = 40;
par.width = 40;
}
v.setLayoutParams(par);
break;
}// inner case UP
}// inner switch
break;
}// case pawn
/***
*
* Answer option 2
*
* ***/
case R.id.answer_option_2: {// Which action is being taken
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
par.topMargin = (int) event.getRawY()
- (v.getHeight() + 22);
par.leftMargin = (int) event.getRawX()
- (v.getWidth() / 2 + 150);
movingCoordinateLeft = (int) event.getRawX()
- (v.getWidth() / 2 + 0);
movingCoordinateTop = par.topMargin;
v.setLayoutParams(par);
break;
}// inner case MOVE
case MotionEvent.ACTION_UP: {
par.height = 40;
par.width = 40;
/*
* par.topMargin = (int) event.getRawY() - (v.getHeight() +
* 15); par.leftMargin = (int) event.getRawX() -
* (v.getWidth() / 2 + 90);
*/
if (windowHeight < 460) {
par.topMargin = 150;
par.leftMargin = 0;
par.height = 40;
par.width = 40;
} else {
par.topMargin = 200;
par.leftMargin = 0;
}
// check if co-ordinates matched and drop answer in drop
// zone
if ((movingCoordinateLeft > 120 && movingCoordinateLeft < 200)
&& (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {
System.out.println("left " + movingCoordinateLeft
+ "top " + movingCoordinateTop);
dropZone2.setImageDrawable(getResources().getDrawable(
R.drawable.hen));
answerOption2.setVisibility(View.INVISIBLE);
}
v.setLayoutParams(par);
break;
}// inner case UP
case MotionEvent.ACTION_DOWN: {
if (windowHeight < 460) {
par.height = 40;
par.width = 40;
} else {
par.height = 40;
par.width = 40;
}
v.setLayoutParams(par);
break;
}// inner case UP
}// inner switch
break;
}// case pawn2
/***
*
* Answer option 3
*
* ***/
case R.id.answer_option_3: {// Which action is being taken
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
par.topMargin = (int) event.getRawY()
- (v.getHeight() + 22);
par.leftMargin = (int) event.getRawX()
- (v.getWidth() / 2 + 150);
movingCoordinateLeft = (int) event.getRawX()
- (v.getWidth() / 2 + 0);
movingCoordinateTop = par.topMargin;
v.setLayoutParams(par);
break;
}// inner case MOVE
case MotionEvent.ACTION_UP: {
par.height = 40;
par.width = 40;
/*
* par.topMargin = (int) event.getRawY() - (v.getHeight() +
* 15); par.leftMargin = (int) event.getRawX() -
* (v.getWidth() / 2 + 90);
*/
if (windowHeight < 460) {
par.topMargin = 191;
par.leftMargin = 0;
par.height = 40;
par.width = 40;
} else {
par.topMargin = 250;
par.leftMargin = 0;
}
// check if co-ordinates matched and drop answer in drop
// zone
if ((movingCoordinateLeft > 220 && movingCoordinateLeft < 310)
&& (movingCoordinateTop > 10 && movingCoordinateTop < 100)) {
System.out.println("left " + movingCoordinateLeft
+ "top " + movingCoordinateTop);
dropZone3.setImageDrawable(getResources().getDrawable(
R.drawable.queen));
answerOption3.setVisibility(View.INVISIBLE);
}
v.setLayoutParams(par);
break;
}// inner case UP
case MotionEvent.ACTION_DOWN: {
System.out.println("down");
if (windowHeight < 460) {
par.height = 40;
par.width = 40;
} else {
par.height = 40;
par.width = 40;
}
v.setLayoutParams(par);
break;
}// inner case UP
}// inner switch
break;
}// case pawn2
}// switch
return true;
}// onTouch
};// dragt
}
和layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal" >
<ImageView
android:id="@+id/frame3"
android:layout_width="100dp"
android:layout_height="80dp"
android:layout_alignParentRight="true"
android:src="@drawable/drag_drop_button" />
<ImageView
android:id="@+id/frame2"
android:layout_width="100dp"
android:layout_height="80dp"
android:layout_toLeftOf="@+id/frame3"
android:src="@drawable/drag_drop_button" />
<ImageView
android:id="@+id/frame1"
android:layout_width="100dp"
android:layout_height="80dp"
android:layout_toLeftOf="@+id/frame2"
android:src="@drawable/drag_drop_button" />
</RelativeLayout>
<FrameLayout
android:id="@+id/Board"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center" >
<ImageView
android:id="@+id/answer_option_1"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="150dp"
android:background="@drawable/duck" >
</ImageView>
<ImageView
android:id="@+id/answer_option_2"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_below="@+id/answer_option_1"
android:layout_gravity="center_horizontal"
android:layout_marginTop="200dp"
android:background="@drawable/hen" >
</ImageView>
<ImageView
android:id="@+id/answer_option_3"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="250dp"
android:background="@drawable/queen" >
</ImageView>
</FrameLayout>
</RelativeLayout>
关于android - 如何使android中的多个 View 移动..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515313/
只是想知道 Jquery Mobile 是否足够稳定以用于实时生产企业移动应用程序。 有很多 HTML5 框架,因为我们的团队使用 JQuery 已经有一段时间了,我们更愿意使用 Jquery 移动框
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
所以我尝试在 JavaScript 中对元素进行拖放。我使用的视频教程在这里; https://www.youtube.com/watch?v=KTlZ4Hs5h80 。我已经按照它的说明进行了编码,
无法在移动 iOS(safari 和 chrome)上自动播放以前缓存的 mp3 音频 我正在 Angular 8 中开发一个应用程序,在该应用程序的一部分中,我试图在对象数组中缓存几个传入的音频 m
Git 基于内容而不是文件,所以我目前理解以下行为,但我想知道是否有特殊选项或 hack 来检测此类事情: git init mkdir -p foo/bar echo "test" foo/a.tx
我正在寻找语义 ui 正确的类来隐藏例如移动 View 中的 DIV。在 Bootstrap 中,我们有“visible-xs”和“hidden-xs”。 但是在语义ui上我只找到了“仅移动网格” 最
我正在使用 ubuntu 和 想要移动或复制大文件。 但是当我与其他人一起使用服务器时,我不想拥有所有内存并使其他进程几乎停止。 那么有没有办法在内存使用受限的情况下移动或复制文件? 最佳答案 如果你
这些指令有什么区别?以 ARM9 处理器为例,它不应该是: ASM: mov r0, 0 C: r0 = 0; ASM: ld r0, 0 C: r0 = 0; ? 我不知道为什么要使用一个或另一个:
我有一个文件夹,其中包含一些随机命名的文件,其中包含我需要的数据。 为了使用数据,我必须将文件移动到另一个文件夹并将文件命名为“file1.xml” 每次移动和重命名文件时,它都会替换目标文件夹中以前
我经常在 IB/Storyboard 中堆叠对象,几乎不可能拖动其他对象后面的对象而不移动前面的对象。无论如何我可以移动已经选择但位于其他对象后面的对象吗?当我尝试移动它时,它总是选择顶部的对象,还是
几个月前,我看到 Safari 7 允许推送通知,它似乎是一个非常有用的工具,除了我看到的每个示例都专注于桌面浏览,而不是移动设备。 Safari 推送通知是否可以在移动设备上运行,如果没有,是否有计
我有一个简单的 View 模型,其中包含修改后的 ObservableCollection使用 SynchronizationContext.Current.Send在 UI 线程上执行对集合的更改。
关于cassandra创建的数据文件和系统文件的位置,我需要移动在“cassandra.yaml”配置文件中设置的“commitlog_directory”、“data_file_directorie
我有这个代码 $(function() { var message = 'Dont forget us'; var original; var txt1 = ' - '; $(wind
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我有这个 HTML 标记: Express 300 bsf Sign Up 我需要将元素从 DOM 上的一个
我有一个可重新排序的 TableView (UITableView 实例)。尽管我已经实现了 UITableViewDataSource 方法: tableView:moveRowAtIndexPat
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 Swing 应用程序,并且实现了 TransferHandle。我在操作结束时需要此信息,在 importData 方法中。 对
我编写了一个具有 add 和 get 方法的 SortedIntList 类。 我调用以下四个方法: SortedIntList mySortedIntList = new SortedIntList
我是一名优秀的程序员,十分优秀!