2015-08-08 2 views
0

Я не могу заставить мой код работать. Я все время получаю сообщение об ошибке.Изображение кнопки java кнопки Android при нажатии

Я сделал selector.xml с этим кодом

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
     android:drawable="@drawable/loginbuttondn" /> 
    <item android:state_selected="false" 
     android:drawable="@drawable/loginbutton" /> 
</selector> 

ЭРВО мой фактический код

package monaiz.net.periscope.periscope; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.MotionEvent; 
import android.view.View.OnTouchListener; 



public class MainActivity extends AppCompatActivity implements OnTouchListener { 

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


    } 
    public boolean onTouch(View v, MotionEvent event) { 
     int action = event.getAction(); 
     switch (action) { 
      v.setOnTouchListener(new OnTouchListener() { 
       @Override 
       public boolean onTouch(View arg0, MotionEvent arg1) { 

        v.setSelected(arg1.getAction()==MotionEvent.ACTION_DOWN); 
        return true; 
       } 
      }); 

     } 
     return true; 
    } 


    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Im пытается получить его так, что, когда я нажимаю на кнопку она имеет нажмите вниз эффект показ другим образом

Im получает ошибку здесь:

Im все еще получает в этой строке v.setSelected(arg1.getAction()==MotionEvent.ACTION_DOWN);

на "v."

код моей кнопки

<ImageView 
     android:layout_width="280dp" 
     android:layout_height="90dp" 
     android:layout_marginTop="830px" 
     android:layout_marginLeft="55dp" 
     android:src="@drawable/loginbutton"/> 
+0

Можете ли вы разместить код xml для вашей кнопки? – androholic

+0

@ androholic done – user870401

+0

Thats your issue. Вы не выбрали селектор в качестве фона, а изображения и источника изображения. – androholic

ответ

0

Использование state_pressed:

вытяжке/selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/loginbuttondn" /> 
    <item 
     android:drawable="@drawable/loginbutton" /> 
</selector> 

<Button 
    android:layout_width="280dp" 
    android:layout_height="90dp" 
    android:background="@drawable/selector"/> 
+0

Я все еще получаю ошибку на этой строке v.setSelected (arg1.getAction() == MotionEvent.ACTION_DOWN); заявив, что его необходимо объявить окончательным – user870401

+0

На самом деле вам даже не нужно реализовывать 'OnTouchListener', если вы правильно настроили свой селектор. – tachyonflux

0

Ваш селектор должен выглядеть следующим образом:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/loginbuttondn" /> 
    <item android:drawable="@drawable/loginbutton" /> 
</selector> 

Вызывайте эту login_button_selector.xml и положить его в/RES/вытяжке папку
Теперь использовать его как это:

<ImageView 
     android:layout_width="280dp" 
     android:layout_height="90dp" 
     android:layout_marginTop="830px" 
     android:layout_marginLeft="55dp" 
     android:src="@drawable/login_button_selector"/> 

Когда вид находится в «нажатом» состоянии, он будет соответствовать первый элемент в селекторе. Когда он не находится в состоянии «нажатие», он будет просто соответствовать второму элементу селектора.

+0

Я все еще получаю ошибку на этой строке v.setSelected (arg1.getAction() == MotionEvent.ACTION_DOWN); заявив, что его необходимо объявить окончательным – user870401

+0

Ну, это другая проблема. Это происходит потому, что вы пытаетесь получить доступ к «v» из анонимного класса. Если вы измените подпись метода «public boolean onTouch (View v, MotionEvent event)» на «public boolean onTouch (final View v, MotionEvent event)», он исчезнет. Я не уверен, что вы пытаетесь сделать, но вы должны попытаться использовать прослушиватель кликов на самих представлениях, а не на активности. –

+0

Im пытается сделать так, чтобы при нажатии на кнопку просмотра изображения оно выглядело так, как будто оно было нажато со второго изображения. – user870401

Смежные вопросы