Crear múltiples secciones en un marco y hacer que cada sección funcione singleton
He estado trabajando en una aplicación similar a Pic Frame , collage Insta Algunos de cómo he tenido éxito para realizar esta tarea y código creado para hacer marcos como este He utilizado una clase de vista multitoma que es
Clase MultiTouchview
- Android: ¿Cómo crear un TextView circular?
- Match_parent no funciona como se esperaba
- Horizontalmente las vistas de centro dentro de Android GridLayout
- Android: muestra la barra de herramientas cuando se muestra la barra de herramientas
- Cómo poner tres botones de imagen en la misma línea en Android
import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Canvas View for the MultiTouch controller * @author 2dwarfs.com * */ public class MultiTouchView extends View implements MultiTouchObjectCanvas<PinchWidget> { private static final int UI_MODE_ROTATE = 1; private static final int UI_MODE_ANISOTROPIC_SCALE = 2; private int mUIMode = UI_MODE_ROTATE; ArrayList<PinchWidget> alist = new ArrayList<PinchWidget>(); private MultiTouchController<PinchWidget> mMultiTouchController = new MultiTouchController<PinchWidget>(this); private int mWidth, mHeight; private PinchWidget mPinchWidget; private Context mContext; public MultiTouchView(Context context) { super(context); //mContext = context; } public void clearCache(){ alist.clear(); } public MultiTouchView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } public MultiTouchView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setPinchWidget(Bitmap bitmap) { mPinchWidget = new PinchWidget(bitmap); alist.add(mPinchWidget); mPinchWidget.init(mContext.getResources()); invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mWidth = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); mHeight = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(mWidth, mHeight); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.TRANSPARENT); for(PinchWidget mmPinchWidget : alist ) mmPinchWidget.draw(canvas); } @Override public boolean onTouchEvent(MotionEvent ev) { return mMultiTouchController.onTouchEvent(ev); } @Override public PinchWidget getDraggableObjectAtPoint(PointInfo pt) { float x = pt.getX(), y = pt.getY(); for(PinchWidget mPinchWidget : alist) { if (mPinchWidget.containsPoint(x, y)) { return mPinchWidget; } } return null; } @Override public void getPositionAndScale(PinchWidget pinchWidget, PositionAndScale objPosAndScaleOut) { objPosAndScaleOut.set(pinchWidget.getCenterX(), pinchWidget.getCenterY(), (mUIMode & UI_MODE_ANISOTROPIC_SCALE) == 0, (pinchWidget.getScaleFactor() + pinchWidget.getScaleFactor()) / 2, (mUIMode & UI_MODE_ANISOTROPIC_SCALE) != 0, pinchWidget.getScaleFactor(), pinchWidget.getScaleFactor(), (mUIMode & UI_MODE_ROTATE) != 0, pinchWidget.getAngle()); } @Override public boolean setPositionAndScale(PinchWidget pinchWidget, PositionAndScale newImgPosAndScale, PointInfo touchPoint) { boolean ok = pinchWidget.setPos(newImgPosAndScale, mUIMode, UI_MODE_ANISOTROPIC_SCALE, touchPoint.isMultiTouch()); if(ok) { invalidate(); } return ok; } @Override public void selectObject(PinchWidget pinchWidget, PointInfo touchPoint) { if(touchPoint.isDown()) { mPinchWidget = pinchWidget; } invalidate(); } }
Y Utilizado este marco en archivo XMl como
Dos.xml para dos marcos
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/transparent" android:orientation="horizontal" > <com.example.imageframe.MultiTouchView android:orientation="horizontal" android:id="@+id/firstone" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="5.0dip" android:layout_marginLeft="5.0dip" android:layout_marginRight="5.0dip" android:layout_marginTop="5.0dip" android:layout_weight="0.5" android:background="@drawable/back" /> <com.example.imageframe.MultiTouchView android:orientation="horizontal" android:id="@+id/secondone" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="5.0dip" android:layout_marginRight="5.0dip" android:layout_marginTop="5.0dip" android:layout_weight="0.5" android:background="@drawable/back" /> </LinearLayout>
Pero mientras que la codificación pensé que su una manera muy compleja de crear y de utilizar marcos como esto. También estos marcos son especialmente cuadrado / rectángulo en forma No puedo hacer marcos curvy afilados o cambiar la forma del marco (haciendo la partición del marco grande / pequeño o cambiar la forma del marco) dinámicamente.
He buscado todo para encontrar una solución adecuada para lograr esta solución, pero no tuvo éxito.
Por favor, guíame lo más pronto posible para crear / manipular / editar marcos dinámicamente o proporcionarme algún fragmento de código para lograr este tipo de funcionalidad.
- ¿Por qué no puedo crear el borde redondo para un rincón específico?
- Utilice símbolo especial (<,>) en diseño de diseño en Android
- Pregunta teórica: cargar el archivo XML-Layout externo en Android
- Cómo llenar los espacios vacíos con contenido debajo de la imagen en android
- Disposición vertical, 2 elementos, Hacer que el primer llenar el espacio restante (inferior uno tiene wrap_content)
- Android ListView con botón no es seleccionable (clicable)
- Android LinearLayout divisor, pero el porcentaje?
- TypedArray no funciona
Usted puede utilizar el fragmento. Diseñar sus diseños por separado. Por ejemplo, fragmentNumberOne.xml y fragmentNumberTwo.xml
Poner un FrameLayout en su xml de la actividad principal;
<FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" />
En su actividad;
Fragment fragment = new YourFragment(); Bundle args = new Bundle(); args.putInt("fragmentLayout", R.layout.fragmentNumberOne); fragment.setArguments(args); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment).commit();
Y crear una clase como;
public class YourFragment extends Fragment { public YourFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { int fragmentLayout = getArguments().getInt("fragmentLayout"); final View rootView = inflater .inflate(fragmentLayout, container, false); if (fragmentLayout == R.layout.fragmentNumberOne) { ... write your code here ... } else if (fragmentLayout == R.layout.fragmentNumberTwo) { ... write your code here ... } return rootView; }
- El fragmento no se reanuda con su actividad después de usar el intercambio de intenciones
- Superponer una capa Transparente de pantalla completa en Android 4.4 (KitKat)