ImageViewを拡張するカスタムクラスがあります
public class MyCompass extends ImageView
{
private float direction;
// Rest Code
}
<ImageView class="myPakagename.MyCompass"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/immg"
android:src="@drawable/hub"/>
私はこれを私のフラグメントで次のように呼ぼうとしています
myCompass = (MyCompass) view.findViewById(R.id.immg);
ただし、これによりclassCastExceptionが発生します。クラスでImageViewを拡張するにはどうすればよいですか?
@SuppressLint("DrawAllocation")
public class MyCompass extends ImageView
{
private float direction;
public MyCompass(Context context)
{
super(context);
setImageResource(R.drawable.qibla_compass_hub);
}
public MyCompass(Context context, AttributeSet attrs) {
super(context, attrs);
this.setImageResource(R.drawable.qibla_compass_hub);
}
public MyCompass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.setImageResource(R.drawable.qibla_compass_hub);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(
MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec));
}
@Override
protected void onDraw(Canvas canvas) {
int w = getMeasuredWidth();
int h = getMeasuredHeight();
canvas.rotate(direction, w / 2, h / 2);
}
public void update(float dir){
direction = dir;
invalidate();
}
私のレイアウト
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/qiblaBg"
android:background="@drawable/qibla_bg">
<RelativeLayout
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/qibla_compass_outer">
<mypakage.MyCompass
android:contentDescription="@string/qibla"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/qiblaImg"
// android:src = @ "img"は機能しませんが、android:backgroundは機能しますが、再びフルスクリーンに拡大します。/>
<RelativeLayout
android:id="@+id/qiblaArrow"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/qibla_compass_arrow" />
</RelativeLayout>
</RelativeLayout>
これを使用すると、レイアウト内のMyCompass ImageViewが全画面に拡大され、画像が表示されません。