在片段中集成自定义imageView类

时间:2013-01-30 07:56:17

标签: java android eclipse

我有一个扩展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布局会延伸至全屏,并且不会显示任何图像。

1 个答案:

答案 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) { }
相关问题