首页 > 解决方案 > Android LuckyWheel 库在 Canvas 项目上添加 onClick 方法

问题描述

我正在使用这个库来绘制一个具有八个相等三角形部分的圆并旋转它们。现在我想添加一个OnClick特征,所以当用户点击其中一个三角形时,它会旋转到选定的位置。这个库已经有代码通过它的索引来旋转一个项目,但我不知道如何找到被点击的三角形的索引。以前有人用过这个吗?任何帮助表示赞赏。

代码:

LuckyWheelView.java

public class LuckyWheelView extends RelativeLayout implements PielView.PieRotateListener {
private int mBackgroundColor;
private int mTextColor;
private int mTopTextSize;
private int mSecondaryTextSize;
private int mBorderColor;
private int mTopTextPadding;
private int mEdgeWidth;
private Drawable mCenterImage;
private Drawable mCursorImage;

private PielView pielView;
private ImageView ivCursorView;

private LuckyRoundItemSelectedListener mLuckyRoundItemSelectedListener;

@Override
public void rotateDone(int index) {
    if (mLuckyRoundItemSelectedListener != null) {
        mLuckyRoundItemSelectedListener.LuckyRoundItemSelected(index);
    }
}

public interface LuckyRoundItemSelectedListener {
    void LuckyRoundItemSelected(int index);
}

public void setLuckyRoundItemSelectedListener(LuckyRoundItemSelectedListener listener) {
    this.mLuckyRoundItemSelectedListener = listener;
}

public LuckyWheelView(Context context) {
    super(context);
    init(context, null);
}

public LuckyWheelView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs);
}

/**
 * @param ctx
 * @param attrs
 */
private void init(Context ctx, AttributeSet attrs) {
    if (attrs != null) {
        TypedArray typedArray = ctx.obtainStyledAttributes(attrs, R.styleable.LuckyWheelView);
        mBackgroundColor = typedArray.getColor(R.styleable.LuckyWheelView_lkwBackgroundColor, 0xffcc0000);
        mTopTextSize = typedArray.getDimensionPixelSize(R.styleable.LuckyWheelView_lkwTopTextSize, (int) LuckyWheelUtils.convertDpToPixel(10f, getContext()));
        mSecondaryTextSize = typedArray.getDimensionPixelSize(R.styleable.LuckyWheelView_lkwSecondaryTextSize, (int) LuckyWheelUtils.convertDpToPixel(20f, getContext()));
        mTextColor = typedArray.getColor(R.styleable.LuckyWheelView_lkwTopTextColor, 0);
        mTopTextPadding = typedArray.getDimensionPixelSize(R.styleable.LuckyWheelView_lkwTopTextPadding, (int) LuckyWheelUtils.convertDpToPixel(10f, getContext())) + (int) LuckyWheelUtils.convertDpToPixel(10f, getContext());
        mCursorImage = typedArray.getDrawable(R.styleable.LuckyWheelView_lkwCursor);
        mCenterImage = typedArray.getDrawable(R.styleable.LuckyWheelView_lkwCenterImage);
        mEdgeWidth = typedArray.getInt(R.styleable.LuckyWheelView_lkwEdgeWidth, 10);
        mBorderColor = typedArray.getColor(R.styleable.LuckyWheelView_lkwEdgeColor, 0);
        typedArray.recycle();
    }

    LayoutInflater inflater = LayoutInflater.from(getContext());
    FrameLayout frameLayout = (FrameLayout) inflater.inflate(R.layout.lucky_wheel_layout, this, false);

    pielView = frameLayout.findViewById(R.id.pieView);
    ivCursorView = frameLayout.findViewById(R.id.cursorView);

    pielView.setPieRotateListener(this);
    pielView.setPieBackgroundColor(mBackgroundColor);
    pielView.setTopTextPadding(mTopTextPadding);
    pielView.setTopTextSize(mTopTextSize);
    pielView.setSecondaryTextSizeSize(mSecondaryTextSize);
    pielView.setPieCenterImage(mCenterImage);
    pielView.setBorderColor(mBorderColor);
    pielView.setBorderWidth(mEdgeWidth);


    if (mTextColor != 0)
        pielView.setPieTextColor(mTextColor);

    ivCursorView.setImageDrawable(mCursorImage);

    addView(frameLayout);

}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    //This is to control that the touch events triggered are only going to the PieView
    for (int i = 0; i < getChildCount(); i++) {
        if (isPielView(getChildAt(i))) {
            return super.dispatchTouchEvent(ev);
        }
    }
    return false;
}

private boolean isPielView(View view) {
    if (view instanceof ViewGroup) {
        for (int i = 0; i < getChildCount(); i++) {
            if (isPielView(((ViewGroup) view).getChildAt(i))) {
                return true;
            }
        }
    }
    return view instanceof PielView;
}

public void setLuckyWheelBackgrouldColor(int color) {
    pielView.setPieBackgroundColor(color);
}

public void setLuckyWheelCursorImage(int drawable) {
    ivCursorView.setBackgroundResource(drawable);
}

public void setLuckyWheelCenterImage(Drawable drawable) {
    pielView.setPieCenterImage(drawable);
}

public void setBorderColor(int color) {
    pielView.setBorderColor(color);
}

public void setLuckyWheelTextColor(int color) {
    pielView.setPieTextColor(color);
}

/**
 * @param data
 */
public void setData(List<LuckyItem> data) {
    pielView.setData(data);
}

/**
 * @param numberOfRound
 */
public void setRound(int numberOfRound) {
    pielView.setRound(numberOfRound);
}

/**
 * @param fixedNumber
 */
public void setPredeterminedNumber(int fixedNumber) {
    pielView.setPredeterminedNumber(fixedNumber);
}

public void startLuckyWheelWithTargetIndex(int index) {
    pielView.rotateTo(index);
}
}

MainActivity.java

public class MainActivity extends Activity {
    List<LuckyItem> data = new ArrayList<>();
    LuckyWheelView luckyWheelView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    luckyWheelView = (LuckyWheelView) findViewById(R.id.luckyWheel);

    LuckyItem luckyItem1 = new LuckyItem();
    /*luckyItem1.topText = "100";
    luckyItem1.icon = R.drawable.test1;*/
    luckyItem1.color = 0xffFFF3E0;
    data.add(luckyItem1);

    LuckyItem luckyItem2 = new LuckyItem();
    /*luckyItem2.topText = "200";
    luckyItem2.icon = R.drawable.test2;*/
    luckyItem2.color = 0xffFFE0B2;
    data.add(luckyItem2);

    LuckyItem luckyItem3 = new LuckyItem();
    /*uckyItem3.topText = "300";
    luckyItem3.icon = R.drawable.test3;*/
    luckyItem3.color = 0xffFFCC80;
    data.add(luckyItem3);

    //////////////////
    final LuckyItem luckyItem4 = new LuckyItem();
    /*luckyItem4.topText = "400";
    luckyItem4.icon = R.drawable.test4;*/
    luckyItem4.color = 0xffFFF3E0;
    data.add(luckyItem4);

    LuckyItem luckyItem5 = new LuckyItem();
    /*luckyItem5.topText = "500";
    luckyItem5.icon = R.drawable.test5;*/
    luckyItem5.color = 0xffFFE0B2;
    data.add(luckyItem5);

    LuckyItem luckyItem6 = new LuckyItem();
    /*luckyItem6.topText = "600";
    luckyItem6.icon = R.drawable.test6;*/
    luckyItem6.color = 0xffFFCC80;
    data.add(luckyItem6);
    //////////////////

    //////////////////////
    LuckyItem luckyItem7 = new LuckyItem();
    /*luckyItem7.topText = "700";
    luckyItem7.icon = R.drawable.test7;*/
    luckyItem7.color = 0xffFFF3E0;
    data.add(luckyItem7);

    LuckyItem luckyItem8 = new LuckyItem();
    /*luckyItem8.topText = "800";
    luckyItem8.icon = R.drawable.test8;*/
    luckyItem8.color = 0xffFFE0B2;
    data.add(luckyItem8);

    /////////////////////

    luckyWheelView.setData(data);
    luckyWheelView.setRound(0);


    luckyWheelView.setLuckyRoundItemSelectedListener(new LuckyWheelView.LuckyRoundItemSelectedListener() {
        @Override
        public void LuckyRoundItemSelected(int index) {
            // Toast.makeText(getApplicationContext(), data.get(index).topText, Toast.LENGTH_SHORT).show();
        }
    });
}


}

标签: android

解决方案


推荐阅读