我有兩個類:CustomView擴展視圖和MainActivity擴展活動。在CustomView中,我使用循環繪製了一系列圓角正方形(canvas.drawRoundRect)。我知道如何檢測任何特定廣場上的點擊,但我不知道如何更改廣場的顏色。我如何從MainActivity調用onDraw方法?或者如果有一個更新方法可以用來從MainActivity類中取消invalidate()。底線是我想知道如何改變我的形狀的顏色,每當我點擊它。謝謝。Android:我繪製了很多形狀。我需要改變一個形狀的顏色,每當我點擊它
0
A
回答
0
使用以下命令:一旦你在Java代碼命名,並宣佈他們的形式,你可以按照如下它的名字叫對象,並將以下更改:
"Name of the object" .setbackgroundColor ("Name of the object" .getContext().GetResources(). GetColor (R.color. "Desired color")
0
在你的onDraw()方法通過在varible
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
firstPaint.setColor(firstRectColor);
canvas.drawRoundRect(//..,firstPaint);
//..
setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction()==MotionEvent.ACTION_DOWN){
if(((motionEvent.getX()>=firstRectX) && (motionEvent.getX()<=firstRectX+firstRectWidth))&&((motionEvent.getY()>=firstRectY) && (motionEvent.getY()<=firstRectY+firstRectHeight))){
//touch point is inside first rectangle
//assign the color to firstRectColor variable and call invalidate to redraw
firstRectColor=getColorToChange();
invalidate();
}//..else if(){}
}
return true;
}
});
}
+0
謝謝它完美的作品! – Sandman
+0
如果工作正常,請標記爲正確答案 –
0
對於這一點,你需要得到被點擊的像素的顏色,然後用下面的洪水填充算法,並通過您的位圖,點設置油漆顏色繪製您的矩形,你點擊了位圖,目標和替換顏色代碼。
private void FloodFill(Bitmap bmp, Point pt, int targetColor, int replacementColor)
{
Queue<Point> q = new LinkedList<Point>();
q.add(pt);
while (q.size() > 0) {
Point n = q.poll();
if (bmp.getPixel(n.x, n.y) != targetColor)
continue;
Point w = n, e = new Point(n.x + 1, n.y);
while ((w.x > 0) && (bmp.getPixel(w.x, w.y) == targetColor)) {
bmp.setPixel(w.x, w.y, replacementColor);
if ((w.y > 0) && (bmp.getPixel(w.x, w.y - 1) == targetColor))
q.add(new Point(w.x, w.y - 1));
if ((w.y < bmp.getHeight() - 1)
&& (bmp.getPixel(w.x, w.y + 1) == targetColor))
q.add(new Point(w.x, w.y + 1));
w.x--;
}
while ((e.x < bmp.getWidth() - 1)
&& (bmp.getPixel(e.x, e.y) == targetColor)) {
bmp.setPixel(e.x, e.y, replacementColor);
if ((e.y > 0) && (bmp.getPixel(e.x, e.y - 1) == targetColor))
q.add(new Point(e.x, e.y - 1));
if ((e.y < bmp.getHeight() - 1)
&& (bmp.getPixel(e.x, e.y + 1) == targetColor))
q.add(new Point(e.x, e.y + 1));
e.x++;
}
}
}
您可以搜索更多關於填充算法的麪糊理解。
https://github.com/latemic/ColorBooth/blob/master/src/com/colorbooth/FloodFill.java
相關問題
- 1. Android更改形狀可繪製顏色
- 2. opengl,改變我的繪製形狀
- 3. 點擊JPanel繪製形狀
- 4. PowerPoint VBA - 單擊形狀,然後按另一個形狀來改變顏色
- 5. 改變形狀顏色在Android XML
- 6. 我需要在d3中繪製一個和絃形狀而不是圓形
- 7. 繪製隨機顏色的形狀
- 8. SFML不繪製形狀,當我打電話形狀的構造「形()」
- 9. OPENCV:我想在循環中繪製基本形狀,每次繪製新形狀時刪除舊形狀
- 10. 下一個點的顏色或形狀
- 11. 改變顏色繪製多邊形
- 12. EaselJS:改變鼠標點擊時的形狀填充顏色
- 13. Java:在鼠標點擊時改變形狀的顏色
- 14. 改變顏色和div的形狀點擊
- 15. Android - 多種顏色和大小可繪製的形狀樣式
- 16. 在java中點擊menuitems時如何改變形狀和顏色
- 17. JavaScript來改變svg形狀的顏色
- 18. 我是否需要指定每個鏈接的顏色狀態?
- 19. Android Afreechart - 改變點線的形狀,粗細和顏色
- 20. 繪製形狀上的點擊事件
- 21. 我怎樣才能讓一個按鈕,改變它的形狀與每一個點擊(音樂鍵)
- 22. 更改形狀顏色
- 23. 改變陣列的形狀,所以它繪製顏色matplotlib矩陣
- 24. Android:在另一個形狀內繪製形狀
- 25. Java Swing JPanel。我如何繪製形狀?
- 26. 在Obj-C(iPad)中繪製一個形狀,看看我是否敲擊它
- 27. 我的形狀不會改變顏色我不知道爲什麼
- 28. 核心圖形繪製多個形狀
- 29. 繪製一個Rosetta形狀
- 30. 如何改變顏色形狀?
有)一個無效()方法的意見,這將調用的onDraw方法https://developer.android.com/reference/android/view/View.html#invalidate( –