1

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が全画面に拡大され、画像が表示されません。

4

1 に答える 1

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) { }
于 2013-01-30T07:58:17.277 に答える