android - 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();
}
});
}
}
解决方案
推荐阅读
- python - 无效的数字参数“/Wsign-compare”:无法在 Windows 上安装 pip 包或构建相应的库
- c# - 释放键后如何缩小我的角色
- node.js - 如何检查图像文件是否真的包含在expressjs的请求中
- kubernetes - kube-controller-manager 和 kube-scheduler leaderelection 丢失 Crashloopback
- c++ - c++中fgetc(stdin)使用数据库数据时如何避免二阶sql注入攻击
- javascript - mongo db中的重复条目
- python - 这个链式分配有什么问题?
- python - PySpark 以 CSV 格式写入存储,处理数据中的逗号
- bluetooth-lowenergy - 通过 onSubscribe 发布的 bleno BLE 字符不适用于 UInt16 / 值高于 255
- python - Tkinter 不想更新