我试图在单击按钮时调整ImageView的大小。我不知道为什么,但是当我在onCreate方法中调用setLayoutParams时它可以工作,但是在按钮的OnClickListener中使用它时却不能工作。我错过了什么吗?
ImageView myImageView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
myImageView = findViewById(R.id.viewtest);
myButton = (Button)findViewById(R.id.buttontest);
resizeImageView(); // resize when called here
myButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
resizeImageView(); // NOT resize when called here
}
});
}
private void resizeImageView() {
Toast.makeText(getApplicationContext(), "Resize", Toast.LENGTH_LONG).show();
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)myImageView.getLayoutParams();
params.height = 300;
params.width = 300;
myImageView.setLayoutParams(params);
}
XML布局。我在RelativeLayout内使用LinearLayout。
<?xml version="1.0" encoding="utf-8"?>
<android.widget.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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ResultActivity">
<android.widget.LinearLayout
android:id="@+id/lineartest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/viewtest"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="centerCrop"
android:layout_centerVertical="true"
app:srcCompat="@mipmap/ic_launcher_round"
android:background="#444"
/>
</android.widget.LinearLayout>
<android.support.v7.widget.AppCompatButton
android:id="@+id/buttontest"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="test"/>
</android.widget.RelativeLayout>
答案 0 :(得分:0)
我刚刚检查了一下。如果使用ImageView,效果很好。
也许您正在多次调整大小。意思是如果您已经在resresizeImageView()
方法中调用了onCreate
,并且在OnClick方法中再次调用了该方法,则调整大小将不可见,因为它已经具有您要调整大小的大小。
在xml中,您拥有AppCompatButton
,但是在Java中,您已定义为Button
。在xml中将AppCompatButton
更改为Button
,在Java中,将Button
更改为AppCompatButton
。
答案 1 :(得分:0)
我使用您的代码创建了一个新项目,并注释了对resizeImageView()
的首次调用,当在resizeImageView()
中调用onClick()
时,它可以正常工作
正如Derek回答的那样,也许您已经在onCreate()
期间为ImageView设置了相同的边界,您希望通过单击按钮来更新该边界。
此外,只是一个建议:
android:layout_below="@id/lineartest"
添加到您的AppCompatButton。android:layout_height="wrap_content"
,以便您可以查看ImageView发生的更改。答案 2 :(得分:0)
尝试这个
public class SomeActivity extends Activity {
public static final float screenWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.the_company);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
}
}
在声明此实现后:
Button mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
float scale = SomeActivity.screenWidth / view.getWidth();
if(view.getScaleX() == 1) {
view.setScaleY(scale);
view.setScaleX(scale);
} else{
view.setScaleY(1);
view.setScaleX(1);
}
}
});
答案 3 :(得分:0)
好。我找到了解决方案。我使用一些异步任务来影响ImageView(加载图像)。当我禁用它时,“调整大小”按钮开始例外工作。感谢您的帮助。