Общий вопрос Android

#android

#Android

Вопрос:

У меня есть небольшая программа, в которой у меня есть 2 изображения, прямо сейчас я выполняю события onTouch для каждого изображения, при нажатии на которое изображение сверху становится невидимым. Это работает нормально.. но наличие этого в основном действии становится запутанным..

Я создал testView, я хотел бы переместить код, который у меня есть в основном действии, в testView, но я не знаю, куда поместить события onTouch и как сделать то же самое оттуда?, Я не знаю, куда поместить события onTouch, а также как нарисовать ImageViews из моего testView.. когда я был в основной деятельности, они рисовали нормально.. но теперь .. я не знаю, как извлечь их из класса «testView extends View»… можете ли вы помочь мне организовать это?

 public class TestView extends View{


    public TestView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    public TestView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public TestView(Context context) {
        super(context);
                // TODO Auto-generated constructor stub
    }

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


    } 
  

}

 public class GameActivity extends Activity {    
/** Called when the activity is first created. */
public int ColorId;
public boolean isUserTurn = false;
public int globalIndex = 1;
@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myviewlay);

final ImageView image1= (ImageView)findViewById(R.id.ImageView03); 
image1.setOnTouchListener(new OnTouchListener()
    {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub

        try {
            Thread.sleep(200);
         ColorId = 1;
        int action = event.getAction(); 

        if(action == MotionEvent.ACTION_DOWN){             

            image1.setVisibility(View.INVISIBLE);    

            }
        else
        {

            image1.setVisibility(View.VISIBLE);     
        }
        //return super.onTouchEvent(event);   
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return true;
        } 


        }); 
final ImageView image2= (ImageView)findViewById(R.id.ImageView02); 
image2.setOnTouchListener(new OnTouchListener()
    {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub

        try {
            Thread.sleep(200);
             ColorId = 2;
        int action = event.getAction();         
        if(action == MotionEvent.ACTION_DOWN){             

            image2.setVisibility(View.INVISIBLE);         
            }
        else
        {            
            image2.setVisibility(View.VISIBLE);     
        }
        //return super.onTouchEvent(event);  
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        return true;
        } 

        });
  

Я просто хочу знать, если я перенесу его в тестовое представление, как я могу реорганизовать его, чтобы он работал оттуда. Я очень новичок в Android…

Спасибо

Ответ №1:

Для событий onTouch вам просто нужно реализовать onTouchListener на вашем TestView компьютере. Если оба ImageViews находятся внутри вашего TestView , вам нужна какая-то ViewGroup для создания макета вашего пользовательского представления. Если нет, вы просто расширяете ImageView вместо расширения View и помещаете свой пользовательский testView в XML-макет и вызываете setContentView(<your_layout>) в своей деятельности.

Если недостаточно ясно, скажите что-нибудь: P

Надеюсь, это помогло, JQCorreia

Комментарии:

1. Спасибо, единственное, что неясно, это где мне разместить мои просмотры изображений с функциями onTouch, которые у меня есть в моей основной деятельности …? 🙁

2. Вы можете создать XML-макет с их помощью. Просто имейте в виду, что вы должны предоставить им полный путь к классу (например, <com.foo.package . MyImageView> например) при использовании пользовательских представлений в вашем макете. После этого в вашей деятельности просто позвоните setContentView() , как я говорил ранее 🙂