una studio sirve que putextra pasar para otro otra objetos entre datos como activity actividades android constructor android-custom-view custom-view

studio - pasar objetos entre actividades android



¿Cómo pasar variables a la vista personalizada antes de llamar a onDraw()? (1)

Lo que debe hacer es agregar una bandera dentro de su AvatarView que verifique si va a renderizar esto o no en su método onDraw .

muestra:

public class AvatarView extends ImageView { private Bitmap body; private Bitmap hat; private int containerHeight; private int containerWidth; private boolean isRender = false; public AvatarView(Context context) { super(context); init(); } public AvatarView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public AvatarView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public void setMeasure(int containerWidth, int containerHeight ) { this.containerHeight = containerHeight; this.containerWidth = containerWidth; } private void init() { body = BitmapFactory.decodeResource(getResources(), R.drawable.battle_run_char); hat = BitmapFactory.decodeResource(getResources(), R.drawable.red_cartoon_hat); } public void setRender(boolean render) { isRender = render; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(isRender ) { canvas.drawBitmap(body, x, y, null); canvas.drawBitmap(hat, x, y, null); } } }

Ahora no se renderizará cuando no setRender y lo establezcas en verdadero . Y simplemente llame a setMeasure para pasar el valor.

Primero debe llamar a setMeasure y luego de establecer la medida, debe llamar a setRender(true) y llamar a invalidate() para llamar al método onDraw y renderizar las imágenes.

Lo que estoy tratando de lograr:

  • medir un contenedor View en mi diseño, mainContainer, que está definido en el XML
  • pase el mainContainer''s width and height del mainContainer''s width and height a una View personalizada diferente antes de onDraw()
  • Quiero pasar el ancho y alto para que la View personalizada sepa dónde dibujar canvas.drawBitmap usando coordenadas
  • La vista personalizada se creará mediante programmatically partir del código

¿Cómo puedo pasar el ancho int y la altura int medidos a mi vista personalizada antes de llamar a onDraw ()?

Vista personalizada

public class AvatarView extends ImageView { private Bitmap body; private Bitmap hat; public AvatarView(Context context) { super(context); init(); } public AvatarView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public AvatarView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { body = BitmapFactory.decodeResource(getResources(), R.drawable.battle_run_char); hat = BitmapFactory.decodeResource(getResources(), R.drawable.red_cartoon_hat); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(body, x, y, null); canvas.drawBitmap(hat, x, y, null); } }

Fragmento

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_customize_avatar, container, false); final RelativeLayout mainContainer = (RelativeLayout) view.findViewById(R.id.main_container); TwoWayView inventoryList = (TwoWayView) view.findViewById(R.id.inventory); inventoryList.setAdapter(null); inventoryList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { } }); mainContainer.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { // Retrieve the width and height containerWidth = mainContainer.getWidth(); containerHeight = mainContainer.getHeight(); // Remove global listener if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) mainContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this); else mainContainer.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); return view; }

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:clickable="true" android:background="#fff" > <com.walintukai.lfdate.CustomTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp" android:textStyle="bold" android:textColor="#fff" android:textSize="20sp" android:textAllCaps="true" android:text="@string/customize_avatar" android:background="#009BFF" /> <RelativeLayout android:id="@+id/main_container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <org.lucasr.twowayview.TwoWayView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/inventory" style="@style/HorizontalListView" android:layout_width="match_parent" android:layout_height="80dp" android:drawSelectorOnTop="false" android:background="#f3f3f3" /> </LinearLayout>