|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Error bitmap en palette
Hola, necesito de su ayuda si no es mucha molestia, tengo un array de drawables en donde guardo las imagenes pero el problema es que no me permite extraer el que se está mostrando actualmente para ponerlo en palette para extraer el vibrantColor es justo en este metodo donde falla y me salta error el logCat
[PHP]private void llenarLayout() { BitmapPalette = BitmapFactory.decodeResource(view.getResources(), ABC_imagenes[posicionLetra]); PaletteLetra = Palette.generate(BitmapPalette); letraTitulo.setText(ABCLetras[posicionLetra]); letraImagen.setImageResource(letraBackGround.getRe sourceId(posicionLetra, posicionLetra)); ContenedorDeLetra.setBackgroundColor(PaletteLetra. getVibrantColor(0)); MA.speak(descripcionLetras[posicionLetra]); }[/PHP] El error es este: [PHP]04-09 16:58:53.793: W/ResourceType(7403): No package identifier when getting value for resource number 0x00000000 04-09 16:58:53.965: W/dalvikvm(7403): threadid=1: thread exiting with uncaught exception (group=0x40018578) 04-09 16:58:54.168: E/AndroidRuntime(7403): FATAL EXCEPTION: main 04-09 16:58:54.168: E/AndroidRuntime(7403): java.lang.IllegalArgumentException: bitmap can not be null 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v7.graphics.Palette.checkBitmapPar am(Palette.java:521) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v7.graphics.Palette.generate(Palet te.java:128) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v7.graphics.Palette.generate(Palet te.java:115) 04-09 16:58:54.168: E/AndroidRuntime(7403): at com.JimSoft.Edu.LearnWithEnuma.LetraFragment.llena rLayout(LetraFragment.java:96) 04-09 16:58:54.168: E/AndroidRuntime(7403): at com.JimSoft.Edu.LearnWithEnuma.LetraFragment.onCre ateView(LetraFragment.java:90) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.Fragment.performCreateView( Fragment.java:1786) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.FragmentManagerImpl.moveToS tate(FragmentManager.java:953) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.FragmentManagerImpl.moveToS tate(FragmentManager.java:1136) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.BackStackRecord.run(BackSta ckRecord.java:739) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.FragmentManagerImpl.execPen dingActions(FragmentManager.java:1499) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.support.v4.app.FragmentManagerImpl$1.run(F ragmentManager.java:456) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.os.Handler.handleCallback(Handler.java:587 ) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.os.Handler.dispatchMessage(Handler.java:92 ) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.os.Looper.loop(Looper.java:130) 04-09 16:58:54.168: E/AndroidRuntime(7403): at android.app.ActivityThread.main(ActivityThread.jav a:3687) 04-09 16:58:54.168: E/AndroidRuntime(7403): at java.lang.reflect.Method.invokeNative(Native Method) 04-09 16:58:54.168: E/AndroidRuntime(7403): at java.lang.reflect.Method.invoke(Method.java:507) 04-09 16:58:54.168: E/AndroidRuntime(7403): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:867) 04-09 16:58:54.168: E/AndroidRuntime(7403): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:625) 04-09 16:58:54.168: E/AndroidRuntime(7403): at dalvik.system.NativeStart.main(Native Method) [/PHP] Gracias por su tiempo. |
|
#2
|
||||
|
||||
Parece que la línea que te falla es esta:
PaletteLetra = Palette.generate(BitmapPalette); Lo que significa que BitmapPalette es null, además si tienes en cuenta este Warning: 04-09 16:58:53.793: W/ResourceType(7403): No package identifier when getting value for resource number 0x00000000 Te está diciendo que has tratado de recuperar el recurso número 0 y no existe, por tanto todo indica que: ABC_imagenes[posicionLetra] es 0, revisa donde asignas esa variable antes de la ejecución de "llenarLayout" |
Gracias de parte de: | ||
#3
|
||||
|
||||
Parece que la línea que te falla es esta: PaletteLetra = Palette.generate(BitmapPalette); Lo que significa que BitmapPalette es null, además si tienes en cuenta este Warning: 04-09 16:58:53.793: W/ResourceType(7403): No package identifier when getting value for resource number 0x00000000 Te está diciendo que has tratado de recuperar el recurso número 0 y no existe, por tanto todo indica que: ABC_imagenes[posicionLetra] es 0, revisa donde asignas esa variable antes de la ejecución de "llenarLayout"
![]() este está en values-es/dimens.xml [php]<resources> <integer-array name="abc_imagenes"> <item>@drawable/letra_a</item> <item>@drawable/letra_b</item> <item>@drawable/letra_c</item> <item>@drawable/letra_d</item> <item>@drawable/letra_e</item> <item>@drawable/letra_f</item> <item>@drawable/letra_g</item> <item>@drawable/letra_h</item> <item>@drawable/letra_i</item> <item>@drawable/letra_j</item> <item>@drawable/letra_k</item> <item>@drawable/letra_l</item> <item>@drawable/letra_m</item> <item>@drawable/letra_n</item> <item>@drawable/letra_n2</item> <item>@drawable/letra_o</item> <item>@drawable/letra_p</item> <item>@drawable/letra_q</item> <item>@drawable/letra_r</item> <item>@drawable/letra_s</item> <item>@drawable/letra_t</item> <item>@drawable/letra_u</item> <item>@drawable/letra_v</item> <item>@drawable/letra_w</item> <item>@drawable/letra_x</item> <item>@drawable/letra_y</item> <item>@drawable/letra_z</item> </integer-array> </resources>[/php]y el valor es aleatorio por que se manda desde un fragment anterior dependiendo de la letra que se haya pulsado, este valor es enviado como bundle, gracias de nuevo. Edito: tambien tengo este array declarado en res/values/dimens.xml para el idioma inglés Última edición por LEAJIM_454 Día 10/04/15 a las 02:00:45. Razón: Falta de informacion |
#4
|
||||
|
||||
Haz una prueba, pon directamente R.drawable.letra_a en vez de ABC_imagenes [posicion]
Si te funciona está claro que hay algo mal en ese array.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Gracias de parte de: | ||
#5
|
||||
|
||||
[PHP]package com.JimSoft.Edu.LearnWithEnuma; import java.util.Locale; import android.app.Activity; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.graphics.Palette; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class LetraFragment extends Fragment implements OnClickListener { private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; private String mParam1; private String mParam2; private View view; private TextView letraTitulo,letraDescripcion; private ImageView letraImagen; private ImageButton letraAnterior,letraSiguiente; private Bitmap BitmapPalette; private LinearLayout ContenedorDeLetra; private OnFragmentInteractionListener mListener; private int[] ABC_imagenes; private String[] ABCLetras, descripcionLetras; private int posicionLetra; private TypedArray letraBackGround; private MainActivity MA; private Palette PaletteLetra; public static LetraFragment newInstance(String param1, String param2) { LetraFragment fragment = new LetraFragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } public LetraFragment() { } @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_letra, container, false); String letraPosition = getArguments().getString("getLetra"); letraTitulo = (TextView)view.findViewById(R.id.LetraTitulo); letraImagen = (ImageView)view.findViewById(R.id.LetraImagen); letraAnterior = (ImageButton)view.findViewById(R.id.LetraAtras); letraSiguiente = (ImageButton)view.findViewById(R.id.LetraSiguiente ); letraDescripcion = (TextView)view.findViewById(R.id.LetraDescripcion) ; ABCLetras = getResources().getStringArray(R.array.titulos_abc) ; descripcionLetras = getResources().getStringArray(R.array.Conceptos_AB C); posicionLetra = Integer.parseInt(letraPosition); ABC_imagenes = getResources().getIntArray(R.array.abc_imagenes); letraBackGround = getResources().obtainTypedArray(R.array.abc_imagen es); letraAnterior.setOnClickListener(this); letraSiguiente.setOnClickListener(this); MA = (MainActivity)getActivity(); ContenedorDeLetra = (LinearLayout)view.findViewById(R.id.ContenedorLet ra); llenarLayout(); return view; } private void llenarLayout() { BitmapPalette = BitmapFactory.decodeResource(view.getResources(), ABC_imagenes[posicionLetra]); PaletteLetra = Palette.generate(BitmapPalette); letraTitulo.setText(ABCLetras[posicionLetra]); letraImagen.setImageResource(letraBackGround.getRe sourceId(posicionLetra, posicionLetra)); ContenedorDeLetra.setBackgroundColor(PaletteLetra. getVibrantColor(0)); MA.speak(descripcionLetras[posicionLetra]); } public void onButtonPressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnFragmentInteractionListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); } } @override public void onDetach() { super.onDetach(); mListener = null; } private void LetraAtras() { posicionLetra=posicionLetra-1; if (posicionLetra==0) { view.findViewById(R.id.LetraAtras).setClickable(fa lse); }else { view.findViewById(R.id.LetraAtras).setClickable(tr ue); } view.findViewById(R.id.LetraSiguiente).setClickabl e(true); llenarLayout(); } private void LetraAdelante() { if (posicionLetra==getResources().getStringArray(R.ar ray.Abecedario).length-1) { view.findViewById(R.id.LetraSiguiente).setClickabl e(false); }else { view.findViewById(R.id.LetraSiguiente).setClickabl e(true); posicionLetra=posicionLetra+1; Log.d("I", String.valueOf(getResources().getStringArray(R.arr ay.Abecedario).length)); llenarLayout(); } } @override public void onClick(View v) { switch (v.getId()) { case R.id.LetraAtras: if (MA.tts!=null) { MA.tts.stop(); } LetraAtras(); break; case R.id.LetraSiguiente: if (MA.tts!=null) { MA.tts.stop(); } LetraAdelante(); break; default: break; } } } [/PHP] Gracias. |
#6
|
||||
|
||||
El problema es cómo defines el array en el XML, según la documentación de Android los arrays de drawables se hacen así (ver último ejemplo) http://developer.android.com/guide/t...tml#TypedArray
Quizá el usar un integer-array en vez de un array es el problema (explicaría que todo valiera 0 si en los XML no sabe convertir un drawable a un int) A mí particularmente no me gustan demasiado los XML... es mucho más fácil y corto un int[] imagenes = new int[]{R.drawable.letraA, R.drawable.letraB, ...};
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 10/04/15 a las 15:55:09. |
Gracias de parte de: | ||
#7
|
||||
|
||||
Gracias Mocelet y kriogeN, siempre me sacan de apuros. |
![]() |
![]() |
||||||
|