2016-07-28 16 views
7

Witam Próbuję dodać efekt marszczyć metodę onClick dla widoku, ale ten nie działa. Wszystkie moje produkty mają identyfikator, ale nie wiem jak go nazwać:Dodawanie efektu ripple dla View in onClick

Oto kod.

@Override 
public void onClick(View v) { 
    int[] attrs = new int[]{R.attr.selectableItemBackground}; 
    TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); 
    int backgroundResource = typedArray.getResourceId(0, 0); 
    v.setBackgroundResource(backgroundResource); 

    switch (v.getId()) { 
     case ACTION_PLAY_ID: 
      Log.d(MainActivity.TAG, getString(R.string.detail_action_play)); 
      v.setBackgroundResource(backgroundResource); 
      Intent intent = new Intent(getActivity(), PlayerActivity.class); 
      intent.putExtra(Video.VIDEO_TAG, videoModel); 
      startActivity(intent); 

      break; 
     case ACTION_BOOKMARK_ID: 
      if (bookmarked) { 
       v.setBackgroundResource(backgroundResource); 
       deleteFromBookmarks(); 
       ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.star_outline)); 
      } else { 
       v.setBackgroundResource(backgroundResource); 
       addToBookmarks(); 
       ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.star)); 
      } 
      break; 
     case ACTION_REMINDER_ID: 
      if (!isReminderSet) { 
       createReminderDialog((ImageView) v); 
      } else { 
       cancelReminder(liveTvProgram.getProgramId()); 
       ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.alarm)); 
      } 
      break; 
    } 
} 

Dla Lubomir

mam coś takiego, ale nie działa zbyt:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 
     savedInstanceState) { 
    View view = inflater.inflate(R.layout.item_detail, container, false); 
    ButterKnife.bind(this, view); 

    View myView = view.findViewById(R.id.actions_container); 
    int[] attrs = new int[]{R.attr.selectableItemBackground}; 
    TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); 
    int backgroundResource = typedArray.getResourceId(0, 0); 
    myView.setBackgroundResource(backgroundResource); 

    loadImage(); 
    init(); 

    return view; 
} 

ImageViews (actionbuttons) jest tworzenie w Javie dla LinearLayout actions_container

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/header_image" 
     android:layout_width="250dp" 
     android:layout_height="250dp" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="10dp" 
     android:layout_marginStart="10dp" 
     android:layout_marginTop="@dimen/detail_image_1_state" 
     android:elevation="8dp"/> 

    <RelativeLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="@dimen/detail_bottom_margin" 
     android:layout_marginTop="@dimen/detail_top_margin" 
     android:background="@color/primary_color"> 

     <LinearLayout 
      android:id="@+id/actions_container" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/detail_actions_height" 
      android:layout_alignParentTop="true" 
      android:background="@drawable/ripple_effect_image" 
      android:elevation="2dp" 
      android:orientation="horizontal" 
      android:paddingLeft="300dp" 
      android:paddingStart="300dp"/> 

     <LinearLayout 
      android:id="@+id/content_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/actions_container" 
      android:orientation="vertical" 
      android:paddingLeft="300dp" 
      android:paddingStart="300dp"> 

      <TextView 
       android:id="@+id/title" 
       style="@style/TextTitleStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

      <TextView 
       android:id="@+id/subtitle" 
       style="@style/TextSubtitleStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:visibility="gone"/> 

      <TextView 
       android:id="@+id/duration" 
       style="@style/TextSubtitleStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

      <TextView 
       android:id="@+id/season" 
       style="@style/TextDescriptionStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:visibility="gone"/> 

      <TextView 
       android:id="@+id/episode" 
       style="@style/TextDescriptionStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:visibility="gone"/> 

      <TextView 
       android:id="@+id/description" 
       style="@style/TextDescriptionStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:maxLines="7"/> 

     </LinearLayout> 

     <FrameLayout 
      android:id="@+id/recommended_frame" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:layout_alignParentBottom="true"> 

      <android.support.v17.leanback.widget.HorizontalGridView 
       android:id="@+id/recommendation" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:clipChildren="false" 
       android:clipToPadding="false" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp"/> 
     </FrameLayout> 

     <TextView 
      android:id="@+id/recommended_text" 
      style="@style/TextHeaderStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@id/recommended_frame" 
      android:text="@string/related_programs"/> 

    </RelativeLayout> 


</RelativeLayout> 

także mój Plik efektów tętnienia xml jest podobny:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/dark_primary_color"> 
    <item> 
     <color android:color="@color/dark_primary_color" /> 
    </item> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 
</ripple> 
+0

https://github.com/traex/RippleEffect używać tej biblioteki – DKV

+0

pan sprawdzić, – DKV

Odpowiedz

11

Klikalne Odwiedzin

W ogóle, odzew na regularne przyciski będą pracować domyślnie w API 21 i innych dotykanych poglądów, może zostać osiągnięty poprzez określenie

android:background="?android:attr/selectableItemBackground"> 

w kodzie :

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

    View myView = findViewById(R.id.myView); 
    int[] attrs = new int[]{R.attr.selectableItemBackground}; 
    TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); 
    int backgroundResource = typedArray.getResourceId(0, 0); 
    myView.setBackgroundResource(backgroundResource); 
} 
+0

Yea wiedzieć?android: attr/selectableItemBackground, ale problem polega na tym, że moje elementy są generyczne w kodzie java i dodają do tego elementu AddActon – Rodriquez

+0

jak wywołać obiekt View, aby uzyskać efekt za pomocą kodu java? – Rodriquez

+0

Po prostu ustaw ten kod java, który napisałem w twojej metodzie onCreate, a nie w onClick. Edytuję mój wpis. :) –

2

można dodać:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:background="@drawable/ripple"/> 
+0

Muszę dodać: Ale to nie działa z mocą – Rodriquez

+0

co to jest api wersja – DKV

+0

compileSdkVersion 23 buildToolsVersion "23.0.3" – Rodriquez

2

tworzyć marszczyć tło

view_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/blue" > 
    <item android:drawable="@drawable/view_normal"> 
    </item> 
</ripple> 

view_noraml.xml // ten sposób można zobaczyć pojawi się w normalnej

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <corners 
     android:radius="@dimen/button_corner"/> 
    <solid 
     android:color="@android:color/transparent"/> 
    <stroke 
     android:width="0.5dp" 
     android:color="@color/white"/> 

</shape> 

teraz ustawić view_background do widzenia

Przykład

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="120dp" 
    android:foreground="@drawable/view_background" 
    android:clickable="true" 
    android:focusable="true" 
    > 
    <ImageView 
     android:id="@+id/grid_item_imageView" 
     android:layout_width="match_parent" 
     android:layout_height="120dp" 
     android:layout_gravity="center" 
     android:scaleType="centerInside" 
     /> 
</FrameLayout> 
0

Rozwiązaniem tego jest prosty łatwy w moim boku.

Oto odzew:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#BFB3F7"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="oval"> 
      <solid android:color="@color/button_background_color" /> 
     </shape> 
    </item> 
</ripple> 

a następnie od klasy muszę szukać funkcja setBackground

Wtedy muszę zadeklarować rozciągliwej elementu do niego. coś takiego:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 

    if (hasFocus) { 
     v.setBackground(res.getDrawable(R.drawable.ripple_effect_for_buttons)); 
     scrollContainer(false); 
    } else { 
     v.setBackground(null); 
     if (recommendation.getFocusedChild() != null) { 
      scrollContainer(true); 
     } 

    } 
} 

I YUPII jego pracy

Powiązane problemy