마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

imageView에서 onDraw

0 추천

안녕하세요.

현재, 터치된 좌표를 구해 rgb값을 나타내는 소스를 만들었습니다.

지금 하고자 하는것은, 터치된 부분을 ondraw를 사용하여 표시하고 싶은데..

자꾸 걸리네요.

뷰를 상속받아 onDraw를 하는 방법론에 있어 제가 개념이 잡혀있지 않는 것 같습니다.

여러 소스를 봤지만 적용하기가 쉽지 않습니다

방향좀 잡아주세요.

 

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView iv = (ImageView) findViewById(R.id.imageView);
        iv.setOnTouchListener(this);


    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {


        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                int x = (int)event.getX();
                int y = (int)event.getY();

                BitmapDrawable D = (BitmapDrawable)((ImageView)findViewById(R.id.imageView)).getDrawable();
                Bitmap bitmap = D.getBitmap();



                int bValue = bitmap.getPixel(x, y) & 0x000000FF;
                int gValue = ((bitmap.getPixel(x, y) & 0x0000FF00)) >> 8;
                int rValue = ((bitmap.getPixel(x, y) & 0x00FF0000)) >> 16;

                TextView tv = (TextView)findViewById(R.id.textView2);
                tv.setText("R = " + rValue + "," + "G = " + gValue+  "," + "B = " + bValue);


            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:


        }

        return false;
    }





}
후니02 (820 포인트) 님이 2016년 12월 12일 질문

1개의 답변

0 추천

안녕하세요

선택한 영역을 표시하고 싶으신거지요?

아래 간단한 예제소스 입니다.

사용 방법은 

Context ctx = this; 

SignView sw = new SignView(ctx);

ll_contain,addView(sw); // 현재 보이는 레이아웃 객체에 붙여주세요

제가 올린 소스의 경우 라인을 그리는 것인데 질문자님이 표현하고자 하는 방식(도형, 선긋기)으로 바꾸셔도 됩니다. 

수고하세요!

 

package kr.co.test;

import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;


public class SignView extends View
{
    Paint p = new Paint();
    ArrayList<Vertex> list = new ArrayList<Vertex>();
   
    // 서명 여부를 확인 변수
    public int count;

    
    // 생성자
    public SignView(Context context)
    {
        super(context);
        p.setColor(Color.BLACK);
        p.setAntiAlias(true);
        p.setStrokeWidth(5);

        count = 0;
    }

    public class Vertex
    {
        // 생성자
        public Vertex(float x, float y, boolean stat)
        {
            this.x = x;
            this.y = y;
            this.stat = stat;
        }

        float x;
        float y;
        boolean stat;
    }

    @Override
    public void onDraw(Canvas can)
    {
        // 캔버스 배경 투명하게
        can.drawColor(Color.TRANSPARENT);

        for(int i = 0 ; i < list.size() ; i++)
        {
            Vertex v = list.get(i);

            if(v.stat == true)
            {
                // 라인 그리기
                can.drawLine(list.get(i - 1).x, list.get(i - 1).y, list.get(i).x, list.get(i).y, p);
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent e)
    {
        count++;
        
        if(e.getAction() == MotionEvent.ACTION_DOWN)
        {

            list.add(new Vertex(e.getX(), e.getY(), false));
        }

        if(e.getAction() == MotionEvent.ACTION_MOVE)
        {
            list.add(new Vertex(e.getX(), e.getY(), true));

            invalidate();  // 화면갱신
        }
        return true;
    }
}

 

히로시 (10,800 포인트) 님이 2016년 12월 13일 답변
안녕하세요! 답변 정말 감사합니다ㅠ...
별도의 SingView 클래스를 만들라고 하시는거지요~?
사용방법도 알려주셨는데..
addView가 안되네요ㅠㅡㅠ..
액티비티에서 컨테이너로 쓰는 뷰가 없으신가요?
LinearLayout이나 RelativeLayout이나 아무 레이아웃의 뷰 객체 생성하셔서
붙이시면 되는데.... 아님 레이아웃을 Inflate 하셔도 되구요
아뇨. 있습니다..
제 말은.. xml쪽에서 지정하는건가요?
저는..
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView iv = (ImageView) findViewById(imageView);
        iv.setOnTouchListener(this);

        int x = 0;
        int y = 0;

        Context ctx = this;

        SignView sw = new SignView(ctx);
        RelativeLayout.addView(sw);





    }

이렇게 했더니 안되네요..ㅠㅠ
...