2017-11-15 19 views
1

今、私はこのようなレイアウトを持っています。ご覧のとおり、UIの内部で制御でconstraintlayoutでスクロール可能なズームインとズームインを実装する方法

  1. ズーム三つのことがある
  2. 重複テキスト
  3. 可動要素は

enter image description here

は今、私は正常に可動な機能を実装している

  • 全体の制約レイアウトとズームイン、アウトコントロールについて説明します。しかし、テキストが重なっているので、ビューをスクロールしたい。スクロールイベントが私のカスタムズーム可能イベントと競合しているようです。 オーバーラップしたテキストをスクロールするためにスクロールイベントを実装したいが、これを行う方法がわからない。

    任意のアドバイスやコメントをお寄せください。

    layout.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        tools:context="com.mycompany.newmobileclient.ui.plant_inventory.PlantInventoryActivity"> 
        <ZoomControls 
        android:id="@+id/simpleZoomControl" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="8dp" 
        android:layout_marginEnd="8dp" 
        android:layout_centerHorizontal="true" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintEnd_toEndOf="parent" /> 
        <android.support.constraint.ConstraintLayout 
        android:id="@+id/plantInventory_container" 
        android:layout_width="0dp" 
        android:layout_height="0dp" 
        android:layout_marginTop="8dp" 
        android:layout_marginBottom="8dp" 
        android:background="@color/worklist_divider_bg" 
        app:layout_constraintBottom_toTopOf="@+id/simpleZoomControl" 
        app:layout_constraintEnd_toEndOf="parent" 
        app:layout_constraintHorizontal_bias="0.0" 
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constraintTop_toBottomOf="@+id/plantInventory_content_title"> 
        <TextView 
         android:id="@+id/textView133" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
    
         android:layout_marginTop="8dp" 
         android:text="@string/sample_plantinventory2" 
         app:layout_constraintStart_toStartOf="parent" 
         app:layout_constraintTop_toTopOf="parent" /> 
    
        </android.support.constraint.ConstraintLayout> 
        <TextView 
        android:id="@+id/plantInventory_content_title" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:text="TextView" 
        tools:text="Plant Inv Activity1 &amp; Activity2" 
        android:padding="4dp" 
        style="@style/worklist_label" 
        android:background="@color/worklist_divider_bg" 
        app:layout_constraintEnd_toEndOf="parent" 
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constraintTop_toTopOf="parent" /> 
    
    </android.support.constraint.ConstraintLayout> 
    

    のstrings.xml

    <string name="sample_plantinventory2"> 
         Compatible Product List\n 
    Code  Description\n 
    ----- -----------\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
    1234 MyCompany ABC1234 HKU (4GE)+ Dickson ABC123 DSL Wi-Fi\n 
        </string> 
    

    PlantInventoryActivity.java

    public class PlantInventoryActivity extends BaseActivity { 
    
        private final float SCALE_RATIO = 0.25f; 
        private final float MAX_SCALE_RATIO = 2f; 
        private final float MIN_SCALE_RATIO = 1f; 
        private ConstraintLayout plantInventoryContainer; 
        private TextView plantInventory_content_title; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_plant_inventory); 
        plantInventory_content_title = findViewById(R.id.plantInventory_content_title); 
        plantInventoryContainer = findViewById(R.id.plantInventory_container); 
        ZoomControls zoomControls = findViewById(R.id.simpleZoomControl); 
        zoomControls.setOnZoomInClickListener(v -> { 
         if (plantInventoryContainer.getScaleX() < MAX_SCALE_RATIO) { 
         plantInventoryContainer.setScaleX(plantInventoryContainer.getScaleX() + SCALE_RATIO); 
         plantInventoryContainer.setScaleY(plantInventoryContainer.getScaleY() + SCALE_RATIO); 
         } 
        }); 
        zoomControls.setOnZoomOutClickListener(v -> { 
         if (plantInventoryContainer.getScaleX() > MIN_SCALE_RATIO) { 
         plantInventoryContainer.setScaleX(plantInventoryContainer.getScaleX() - SCALE_RATIO); 
         plantInventoryContainer.setScaleY(plantInventoryContainer.getScaleY() - SCALE_RATIO); 
         } 
        }); 
        zoomControls.bringToFront(); 
        plantInventory_content_title.bringToFront(); 
        plantInventoryContainer.setOnTouchListener(new ZoomableListener()); 
    
    
        } 
    } 
    

    ZoomableListener.java

    public class ZoomableListener implements OnTouchListener { 
        float x = 0; 
        float y = 0; 
        float dx = 0; 
        float dy = 0; 
    
        @Override 
        public boolean onTouch(View myView, MotionEvent event) { 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: { 
         x = event.getX(); 
         y = event.getY(); 
         dx = x - myView.getX(); 
         dy = y - myView.getY(); 
         } 
         break; 
         case MotionEvent.ACTION_MOVE: { 
         myView.setX(event.getX() - dx); 
         myView.setY(event.getY() - dy); 
         } 
         break; 
         case MotionEvent.ACTION_UP: { 
         //your stuff 
         } 
        } 
        return true; 
        } 
    } 
    
  • +0

    scrollviewであなたの制約レイアウトを置きます。 – Dilip

    +0

    私は試しました。しかし、スクロールイベントが私のタッチリスナーと競合している、それは悪いユーザーエクスペリエンスを終了させる –

    +0

    あなたがこれに対する解決策を見つけたらお知らせください。私にも同様の問題があります。 –

    答えて

    0

    数日後に、スクロール機能を実装するために水平と垂直のスクロールビューを使用しようとしました。また、ズームイン、アウトコントロールを使用してテキストサイズ(テキストスケールではなく)を制御します。私はそれがズームアウトやPDFビューアのような可動機能のようではないことを知っている。より良い仕事があれば、私はそれを更新するでしょう。

    ネストされた制約レイアウトエディターの中で、いつものようにデザインエディターでアイテムをデザインできます。

    activity.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <layout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        xmlns:tools="http://schemas.android.com/tools"> 
        <data> 
    
        <variable 
         name="viewModel" 
         type="ActivityViewModel" /> 
        <variable 
         name="selectedActivity" 
         type="String" /> 
    
        </data> 
        <android.support.constraint.ConstraintLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        tools:context="MyActivity"> 
        <ZoomControls 
         android:id="@+id/simpleZoomControl" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="8dp" 
         android:layout_marginEnd="8dp" 
         android:layout_marginRight="8dp" 
         android:layout_centerHorizontal="true" 
         app:layout_constraintBottom_toBottomOf="parent" 
         app:layout_constraintEnd_toEndOf="parent" /> 
        <HorizontalScrollView 
         android:id="@+id/scrollContainer" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:layout_marginTop="8dp" 
         android:layout_marginBottom="8dp" 
         android:fillViewport="true" 
         app:layout_constraintBottom_toTopOf="@+id/simpleZoomControl" 
         app:layout_constraintEnd_toEndOf="parent" 
         app:layout_constraintHorizontal_bias="0.0" 
         app:layout_constraintStart_toStartOf="parent" 
         app:layout_constraintTop_toBottomOf="@+id/content_title"> 
         <ScrollView 
         android:layout_width="match_parent" 
         android:layout_height="match_parent"> 
         <LinearLayout 
          android:id="@+id/directchild" 
          android:layout_width="wrap_content" 
          android:layout_height="fill_parent" 
          android:orientation="horizontal"> 
          <include 
          android:id="@+id/included" 
          layout="@layout/inner_layout" 
          app:viewModel="@{viewModel}" /> 
         </LinearLayout> 
         </ScrollView> 
        </HorizontalScrollView> 
        <TextView 
         android:id="@+id/content_title" 
         style="@style/worklist_label" 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:padding="4dp" 
         android:background="@color/worklist_divider_bg" 
         android:text="@{selectedActivity}" 
         app:layout_constraintEnd_toEndOf="parent" 
         app:layout_constraintStart_toStartOf="parent" 
         app:layout_constraintTop_toTopOf="parent" 
         tools:text=" Inv Activity1 &amp; Activity2" /> 
    
        </android.support.constraint.ConstraintLayout> 
    </layout> 
    

    Activity.java

    @Override 
        protected void onCreate(Bundle savedInstanceState) { 
        ... 
        ZoomControls zoomControls = binding.simpleZoomControl; 
        zoomControls.setOnZoomInClickListener(v -> { 
         increaseTextSize(SCALE_RATIO); 
        }); 
        zoomControls.setOnZoomOutClickListener(v -> { 
         decreaseTextSize(SCALE_RATIO); 
        }); 
        zoomControls.bringToFront(); 
        } 
    
    @Override 
        public void increaseTextSize(float value) { 
        int childCount = binding.included.Container.getChildCount(); 
        for (int i = 0; i < childCount; i++) { 
         View view = binding.included.Container.getChildAt(i); 
         if (view instanceof TextView) { 
         TextView textView = (TextView) view; 
         float currentTextSize = textView.getTextSize(); 
         textView 
          .setTextSize(TypedValue.COMPLEX_UNIT_PX, currentTextSize + value); 
         } 
        } 
        } 
    
        @Override 
        public void decreaseTextSize(float value) { 
        int childCount = binding.included.Container.getChildCount(); 
        for (int i = 0; i < childCount; i++) { 
         View view = binding.included.Container.getChildAt(i); 
         if (view instanceof TextView) { 
         TextView textView = (TextView) view; 
         float currentTextSize = textView.getTextSize(); 
         textView 
          .setTextSize(TypedValue.COMPLEX_UNIT_PX, currentTextSize - value); 
         } 
        } 
        } 
    
    関連する問題