Android 有时图像视图中的图像不显示
在一个活动中,有4个视图,用户可以根据当前答案上的金额“打赌”该问题的正确答案。图像上的金额随着金额的变化而变化(从零到一包钱,再到一堆钱) 有时,当值被添加到视图中时(通过触摸/单击或从另一个答案拖动),图像不会显示(只有在之前该答案上没有钱时才会出现这种情况) 下面是视图代码(我添加了一些日志和注释): 在用户选择Android 有时图像视图中的图像不显示,android,imageview,Android,Imageview,在一个活动中,有4个视图,用户可以根据当前答案上的金额“打赌”该问题的正确答案。图像上的金额随着金额的变化而变化(从零到一包钱,再到一堆钱) 有时,当值被添加到视图中时(通过触摸/单击或从另一个答案拖动),图像不会显示(只有在之前该答案上没有钱时才会出现这种情况) 下面是视图代码(我添加了一些日志和注释): 在用户选择start后,活动将调用initConfig类(布局已绘制且可见) 下面是XML代码 <?xml version="1.0" encoding="utf-8"?> &l
start
后,活动将调用initConfig类(布局已绘制且可见)
下面是XML代码
<?xml version="1.0" encoding="utf-8"?>
<com.test.game.views.game.AnswerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/transparent">
<com.walkme.moneyquiz.views.extended.AutoResizeTextView
android:id="@+id/answerTextView"
style="@style/answerTextViewStyle"
android:text="All at the same time"/>
<LinearLayout
android:id="@+id/answerBoxLinerLayout"
style="@style/answerBetBoxStyle"
android:orientation="vertical"
android:background="@drawable/bg_dark_gray_square_blue_border">
<RelativeLayout
android:id="@+id/betBoxContainerRelativeLayout"
style="@style/moneyPackBetRelativeLayoutStyle">
<ImageView
android:id="@+id/betBoxTextView"
style="@style/moneyPackBetImageInRelativeLayoutStyle"
android:src="@drawable/icn_money_pack_bet_extra_full"/>
</RelativeLayout>
<com.walkme.moneyquiz.views.extended.AutoResizeTextView
android:id="@+id/moneyBetTextView"
style="@style/betValueTextStyle"
android:text="5.000$"
android:singleLine="true"/>
</LinearLayout>
</com.test.game.views.game.AnswerView>
根据我对您代码的理解,未设置
\u moneyPacktView
的默认图像。当getImageForAmount()
为0时,给定null返回值,并将带有null参数的setImage()仅设置为可见。也许这就是为什么你的图像没有显示出来。也许您可以在setImage()中为null参数添加以下代码
或者在您的getImageForAmount()
调用invalidate后检查图像大小。如果大小不正确,请强制将其设置为正确的大小。不幸的是,它不起作用。此外,当数量为0时,不应出现任何可见图像。问题是,10次中有7次它工作正常,其他时间图像从不显示,一旦图像停止显示,它就再也不会显示,直到我销毁活动并返回,但根据日志,一切都正常工作:/n不清楚您在哪里设置了_moneyPacktView变量。另外,为什么这个视图有两个getter方法?(getImageView和getMoneyImageView)。请发布设置此变量的代码部分。可能是这个视图没有正确初始化。我在问题中添加了所需的信息,我没有添加主布局,因为它有很多其他的东西和很多很多样式。无论如何,视图总是不同于null,并且具有正确的大小(在这两种情况下,当图像显示和不显示时),这使我相信layoutHm没有问题。。这就是问题所在,在无效调用之后,ImageView
会将其大小重置为0,并且不会“增长”回来。。但这并不是每次都会发生。。奇怪的
public class AnswerView extends MoneyView
{
TextView _answerTextView;
LinearLayout _answerBoxLinerLayout;
RelativeLayout _betBoxContainerRelativeLayout;
private String _answer = "";
public AnswerView(Context context)
{
this(context, null);
}
public AnswerView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public AnswerView(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
initConfig(true);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public AnswerView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
{
super(context, attrs, defStyleAttr, defStyleRes);
initConfig(true);
}
@Override
public void initConfig(boolean setDefaultValues)
{
super.initConfig(setDefaultValues);
_answerTextView = (TextView)findViewById(R.id.answerTextView);
_moneyValueTextView = (TextView)findViewById(R.id.moneyBetTextView);
_moneyPacktView = (ImageView)findViewById(R.id.betBoxTextView);
_answerBoxLinerLayout = (LinearLayout)findViewById(R.id.answerBoxLinerLayout);
_betBoxContainerRelativeLayout = (RelativeLayout)findViewById(R.id.betBoxContainerRelativeLayout);
setAnswer(_answer);
setValue(0l);
}
public TextView getTextView()
{
return _answerTextView;
}
public String getAnswer()
{
return _answer;
}
public void setAnswer(String answer)
{
if(answer == null){ answer = ""; }
_answer = answer;
if(_answerTextView != null)
{
_answerTextView.setText(_answer);
}
}
public void setNormal()
{
_answerBoxLinerLayout.setBackgroundResource(R.drawable.bg_dark_gray_square_blue_border);
setValue(0l);
setAlpha(1.0f);
}
}
<?xml version="1.0" encoding="utf-8"?>
<com.test.game.views.game.AnswerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/transparent">
<com.walkme.moneyquiz.views.extended.AutoResizeTextView
android:id="@+id/answerTextView"
style="@style/answerTextViewStyle"
android:text="All at the same time"/>
<LinearLayout
android:id="@+id/answerBoxLinerLayout"
style="@style/answerBetBoxStyle"
android:orientation="vertical"
android:background="@drawable/bg_dark_gray_square_blue_border">
<RelativeLayout
android:id="@+id/betBoxContainerRelativeLayout"
style="@style/moneyPackBetRelativeLayoutStyle">
<ImageView
android:id="@+id/betBoxTextView"
style="@style/moneyPackBetImageInRelativeLayoutStyle"
android:src="@drawable/icn_money_pack_bet_extra_full"/>
</RelativeLayout>
<com.walkme.moneyquiz.views.extended.AutoResizeTextView
android:id="@+id/moneyBetTextView"
style="@style/betValueTextStyle"
android:text="5.000$"
android:singleLine="true"/>
</LinearLayout>
</com.test.game.views.game.AnswerView>
<style name="answerTextViewStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:layout_margin">@dimen/marginSmall</item>
<item name="android:padding">@dimen/marginSmall</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/textSizeSmall</item>
<item name="android:gravity">center</item>
<item name="android:background">@color/mainBlue</item>
</style>
<style name="answerBetBoxStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:layout_margin">@dimen/marginSmall</item>
<item name="android:background">@android:color/transparent</item>
</style>
<style name="moneyPackBetRelativeLayoutStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:layout_gravity">center</item>
</style>
<style name="moneyPackBetImageInRelativeLayoutStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:maxHeight">@dimen/imageHeightMedium</item>
<item name="android:adjustViewBounds">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:scaleType">centerInside</item>
<item name="android:layout_gravity">center</item>
<item name="android:layout_centerInParent">true</item>
</style>
<style name="betValueTextStyle" >
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">0dp</item>
<item name="android:layout_weight">0.5</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/textSizeMedium</item>
<item name="android:gravity">center</item>
</style>
if(drawable == null)
{
Log.e("AnswerView", "setImage -- Drawable Null");
_moneyPacktView.setImageDrawable(getContext().getResources().getDrawable(R.drawable.anyDefaultImage));
_moneyPacktView.setAlpha(1.0f);
_moneyPacktView.setVisibility(View.VISIBLE);
invalidate();
}
if(amount == 0)
{
Log.e("AnswerView", "getImageForAmount -- amount == 0 -- Null");
return getContext().getResources().getDrawable(R.drawable.anyDefaultImage);
}