2017-03-07 116 views
2

我是程序Java/Android中的新手,並且遇到了一個小問題。 我搜索爲什麼我的代碼不工作,但我沒有找到一個答案 - 所以這裏是我的問題:Java Android動態更改ImageView的位置

我想通過一個Button改變一個ImageView的位置運行。我有兩個按鈕 - 左和右。但好奇的是 - 只有一個正在工作(右移按鈕)。如果我點擊左移按鈕沒有改變。

我希望有人能幫助我,因爲我搜索了很長時間的細節。

坦克很多任何幫助!

這裏是代碼:

package de.androidnewcomer.bildattribute; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button leftButton=(Button)findViewById(R.id.buttonLeft); 
    leftButton.setOnClickListener(this); 
    Button rightButton=(Button)findViewById(R.id.buttonRight); 
    rightButton.setOnClickListener(this); 

} 
@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.buttonLeft: 
      moveLeft(); 
     case R.id.buttonRight: 
      moveRight(); 
    } 
} 
private void moveLeft() { 
    ImageView ball=(ImageView)findViewById(R.id.ball); 
    FrameLayout.LayoutParams paramsLeft=(FrameLayout.LayoutParams)ball.getLayoutParams(); 
    paramsLeft.width=50; 
    paramsLeft.height=50; 
    paramsLeft.rightMargin +=20; 
    ball.setLayoutParams(paramsLeft); 
} 
private void moveRight() { 
    ImageView ball=(ImageView)findViewById(R.id.ball); 
    FrameLayout.LayoutParams paramsRight=(FrameLayout.LayoutParams) ball.getLayoutParams(); 
    paramsRight.width=50; 
    paramsRight.height=50; 
    paramsRight.leftMargin +=20; 
    ball.setLayoutParams(paramsRight); 
} 
} 

和XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="de.androidnewcomer.bildattribute.MainActivity"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/layout1"> 

    <Button 
     android:text="Left" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/buttonLeft" 
     android:layout_gravity="bottom|left" 
     android:layout_marginLeft="50dp" /> 

    <Button 
     android:text="Right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/buttonRight" 
     android:layout_gravity="bottom|right" 
     tools:layout_marginRight="50dp" /> 

    <ImageView 
     app:srcCompat="@drawable/image1" 
     android:id="@+id/image1" 
     android:layout_gravity="center_vertical|center_horizontal" 
     android:layout_height="20dp" 
     android:layout_width="20dp" /> 

</FrameLayout> 

回答

1

的問題是在你的onClick() - 該break;語句丟失:

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.buttonLeft: 
      moveLeft(); 
      break; // MISSING 
     case R.id.buttonRight: 
      moveRight(); 
      break; // MISSING 
    } 
} 

沒有break聲明,當你打buttonLeft,您執行這兩個moveLeft() & moveRight()兩者,這導致在layout沒有變化。

1

即使你需要修改你onClick方法,因爲它已經說了,你moveLeft方法應該更新左旁(就像moveRight

private void moveLeft() { 
    ImageView ball=(ImageView)findViewById(R.id.ball); 
    FrameLayout.LayoutParams paramsLeft=(FrameLayout.LayoutParams)ball.getLayoutParams(); 
    paramsLeft.width=50; 
    paramsLeft.height=50; 
    paramsLeft.leftMargin -=20; 
    ball.setLayoutParams(paramsLeft); 
} 

您可以嘗試在你的佈局,看看會發生什麼您將左右邊距都添加到元素中,當然這不符合您的期望。