我有兩個形象的看法時,我已經實現了觸摸唯一的一個觀點是能夠移動整體佈局,但其他圖像視圖是在保持在固定的位置,我們如何能夠使其他圖像視圖移動從一個地方到另一個如果它不將代碼用於多視圖的運動幫幫忙PLZ ..朋友如何讓Android的多個視圖移動..?
1
A
回答
2
我有這樣的代碼很久以前寫的,看看它是否適合你
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>
相關問題
- 1. 如何讓視圖在Android中沿着手指運動移動?
- 2. 如何在Android中移動多個視圖?
- 3. Android Studio如何動畫移動視圖?
- 4. Android - 移動視圖
- 5. Android:拖動多個視圖
- 6. 如何在Android中使用動畫將視圖移動到另一個視圖?
- 7. 如何在拖動其他視圖時移動一個視圖
- 8. Android片段 - 從一個視圖移動到另一個視圖?
- 9. 如何在Android中的單個視圖上浮動多個視圖
- 10. 如何將一個視圖移動到另一個視圖?
- 11. 如何從一個視圖移動到另一個視圖
- 12. 如何移動到水平滾動視圖中的下一個圖像android
- 13. Android動畫視圖的多個設備
- 14. Android:多個視圖在一個活動
- 15. Android:單個活動,多個視圖
- 16. 如何讓移動
- 17. 如何讓多個JSON值返回多個文本視圖?
- 18. 如何在多個視圖間移動時選擇行
- 19. 如何在視圖控制器周圍移動多個UIImage視圖?
- 20. 如何將SubView的動畫從一個視圖移動到另一個視圖?
- 21. Android MVP,如何協調多個視圖?
- 22. 如何讓移動設備顯示圖像而不是視頻?
- 23. 如何在Android的回收視圖中添加多個視圖
- 24. 來自Android的Google的移動視圖
- 25. 如何控制在另一個視圖上移動視圖?
- 26. 如何讓圖像隨機移動?
- 27. 如何讓android視圖可縮放?
- 28. Android:動畫後移動視圖?
- 29. Android - 動態添加多個視圖
- 30. 的Android ViewSwitcher多個視圖
發佈您的代碼。 –
我沒有這正完美,我可以有任何的示例代碼 – dileep