私はほぼ3日間私を悩ませている問題を抱えています。カスタム配列アダプタを備えたListViewがあります。すべてがかなり標準的です。次に、レイアウトにカスタムImageViewがあります。スクロールすると画像が消えるので、カスタムImageViewに問題があると思います。
少しテストを行い、長方形のonDraw()メソッドを追加すると、常に表示されます。通常のImageViewも追加しましたが、常に表示されます。
問題は、画像が表示される場合と表示されない場合があるカスタムビューにあります。
ここにいくつかのコードがあります
カスタムビュー
public class CropTopImageView extends ImageView {
private static Paint paint;
public CropTopImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CropTopImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public CropTopImageView(Context context) {
super(context);
init();
}
private void init(){
setScaleType(ScaleType.MATRIX);
paint = new Paint();
paint.setStrokeWidth(20);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected boolean setFrame(int l, int t, int r, int b) {
Matrix matrix = getImageMatrix();
float scale;
int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
int drawableWidth = getDrawable().getIntrinsicWidth();
int drawableHeight = getDrawable().getIntrinsicHeight();
if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
scale = (float) viewHeight / (float) drawableHeight;
} else {
scale = (float) viewWidth / (float) drawableWidth;
}
matrix.setScale(scale, scale);
setImageMatrix(matrix);
return super.setFrame(l, t, r, b);http://imageshack.us/a/img560/8381/example3g.png
}
// This is just a test
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int height = this.getMeasuredHeight();
int width = this.getMeasuredWidth();
// Draw a border
canvas.drawRect(10, 10, width-10, height-10, paint);
}
}
アダプターgetView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("CardView", "getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = (RelativeLayout) inflater.inflate(resource, null);
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.cardImage = (CropTopImageView) convertView
.findViewById(R.id.cardImage);
return convertView;
}
XMLレイアウト
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="30dip"
android:orientation="vertical"
android:paddingTop="30dp"
>
<com.td.fs.android.customview.CropTopImageView
android:id="@+id/cardImage"
android:layout_width="246dp"
android:layout_height="70dip"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:src="@drawable/card_visa_blue"
/>
<com.td.fs.android.customview.CropTopImageView
android:id="@+id/pocketImage"
android:layout_width="275dp"
android:layout_height="30dp"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginTop="50dip"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:scaleType="fitXY"
android:src="@drawable/holder_pocket" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/pocketImage"
android:layout_alignParentTop="true"
android:layout_marginLeft="92dp"
android:src="@drawable/home_dashboard_picker" />
</RelativeLayout>
ImageViewは常に表示されています。onDrawは常に表示されています。CropTopImageView src画像は、ランダムに消える/現れるよりも初めて表示されます。
会社の企画なので、画像を見せてもらえるかわかりません。
アップデート