2017-12-06 10 views
0

GitHubのサンプルコードがあります。例はうまくいきますが、コードの一部しか取っていないときは、それを動作させることはできません。カスタムビューを使用してXMLファイルに -methodという質問があります。コードは次のとおりです。アンドロイド:カスタムビューのonClickメソッド

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.tapio.testingapp.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <com.example.tapio.testingapp.LVCircularCD 
     android:id="@+id/lv_circularCD" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:onClick="startAnim"/> 

</RelativeLayout> 

Javaコード:

public class LVCircularCD extends View { 

    private Paint mPaint; 

    private float mWidth = 0f; 
    private float mPadding = 0f; 

    RotateAnimation mProgerssRotateAnim; 
    RectF rectF = new RectF(); 
    RectF rectF2 = new RectF(); 
    public LVCircularCD(Context context) { 
     this(context, null); 
    } 

    public LVCircularCD(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public LVCircularCD(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initPaint(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     if (getMeasuredWidth() > getHeight()) 
      mWidth = getMeasuredHeight(); 
     else 
      mWidth = getMeasuredWidth(); 
     mPadding = 5; 


    } 



    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.save(); 
     mPaint.setStrokeWidth(2); 
     canvas.drawCircle(mWidth/2, mWidth/2, mWidth/2 - mPadding, mPaint); 
     mPaint.setStrokeWidth(3); 
     canvas.drawCircle(mWidth/2, mWidth/2, mPadding, mPaint); 

     mPaint.setStrokeWidth(2); 
     rectF = new RectF(mWidth/2 - mWidth/3, mWidth/2 - mWidth/3, 
       mWidth/2 + mWidth/3, mWidth/2 + mWidth/3); 
     canvas.drawArc(rectF, 0, 80 
       , false, mPaint); 

     canvas.drawArc(rectF, 180, 80 
       , false, mPaint); 


     rectF2 = new RectF(mWidth/2 - mWidth/4, mWidth/2 - mWidth/4, 
       mWidth/2 + mWidth/4, mWidth/2 + mWidth/4); 
     canvas.drawArc(rectF2, 0, 80 
       , false, mPaint); 
     canvas.drawArc(rectF2, 180, 80 
       , false, mPaint); 
     canvas.restore(); 


    } 


    private void initPaint() { 
     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setColor(Color.WHITE); 
     mProgerssRotateAnim = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 
       0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
     mProgerssRotateAnim.setRepeatCount(-1); 
     mProgerssRotateAnim.setInterpolator(new LinearInterpolator());//不停顿 
     mProgerssRotateAnim.setFillAfter(true);//停在最后 


    } 

    public void setViewColor(int color) 
    { 
     mPaint.setColor(color); 
     postInvalidate(); 
    } 



    public void startAnim(View view) { 
     stopAnim(); 
     mProgerssRotateAnim.setDuration(1500); 
     startAnimation(mProgerssRotateAnim); 
    } 

    public void startAnim(int time) { 
     stopAnim(); 
     mProgerssRotateAnim.setDuration(time); 
     startAnimation(mProgerssRotateAnim); 
    } 

    public void stopAnim() { 
     clearAnimation(); 
    } 


} 

問題のある場所がXMLファイルである:android:onclick = startAnim。次のエラーが表示されます:"Corresponding method handler 'public void startAnim(android.view.View)' not found"

+0

LVCircularCDの代わりにxmlレイアウトを使用しているアクティビティでstartAnimメソッドを追加してください –

+0

アクティビティコードを追加してください。クリックを実行する場所。 –

答えて

0

MainActivity-activityにstartAnimメソッドを追加しました。正常に動作します。私はまだ元の作品がとてもうまくいったのだろうと思っています

関連する問題