我有一个扩展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:后台工作但它再次延伸到全屏。 /&GT;
<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布局会延伸至全屏,并且不会显示任何图像。
答案 0 :(得分:1)
您可以使用以下方法直接在xml中引用自定义图像视图:
<myPakagename.MyCompass
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/immg"
android:src="@drawable/hub"/>
并确保您的自定义视图覆盖:
public MyCompass(Context context) {}
和
public MyCompass(Context context, AttributeSet attrs) {}
和
public MyCompass(Context context, AttributeSet attrs, int defStyle) { }