ImageViewを垂直方向に使用して画像を追加しているズームインのカスタム線形描画を作成しました。画像間をスクロールするにはScrollViewとHorizontalScrollViewを使用しました。私の問題は、私がカスタム線形レイアウトをスケーリングしたときです。スクロールビューのサイズは調整されず、カスタム線形レイアウトの上端と下端がクリップされます。私の論理がどこに間違っているのか分かりません。 Googleを使って解決策を見つけることができませんでした。下記のリンクから私のアプリを見つけて、これを解決するための提案をお知らせください。 SampleApplinearlayout内の子ビューを拡大縮小してスクロール可能にする方法はありますか?
答えて
あなたはScrollView
でそれを行うと、あなたのレイアウトに敷設された画像を縦にしたい場合は、各ImageView
ためLinearLayout
内部HorizontalScrollView
とScrollView
を作成する必要があります。
縮尺がLinearLayout
に設定されている場合、1つの画像が縮尺されると、他のすべての画像は同時に縮尺されます。私はあなたがする必要があると思うのは、それぞれの画像を拡大することです。次に、それぞれImageView
に実装することができます。たとえば、 ScaleImageViewを作成します。
そして、あなたはLinearLayout
にImageView
のリストを表示するために、あなたは次のように例をコードしてもよい:ScrollView
とZoom
間の競合を避けるため
private List<int> imageList = new List<int> { Resource.Drawable.image1, Resource.Drawable.image2, Resource.Drawable.image3, Resource.Drawable.image4 };
private LinearLayout root;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
root = FindViewById<LinearLayout>(Resource.Id.root);
root.SetClipChildren(false);
for (int i = 0; i < imageList.Count; i++)
{
Bitmap bitmap = BitmapFactory.DecodeResource(this.Resources, imageList[i]);
var lp = new LinearLayout.LayoutParams(bitmap.Width, bitmap.Height);
lp.SetMargins(0, 2, 0, 2);
lp.Gravity = Android.Views.GravityFlags.Center;
ScaleImageView img = new ScaleImageView(this, null);
img.SetImageBitmap(bitmap);
img.SetScaleType(ScaleType.Matrix);
root.AddView(img, i);
}
}
:背後
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true"
android:id="@+id/sv">
<HorizontalScrollView android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true"
android:id="@+id/hsv">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root" />
</HorizontalScrollView>
</ScrollView>
コードのScaleImageView
を次のように変更します。
public override bool OnTouchEvent(MotionEvent e)
{
if (m_GestureDetector.OnTouchEvent(e))
{
m_PreviousMoveX = (int)e.GetX();
m_PreviousMoveY = (int)e.GetY();
return true;
}
var touchCount = e.PointerCount;
switch (e.Action)
{
case MotionEventActions.Down:
case MotionEventActions.Pointer1Down:
case MotionEventActions.Pointer2Down:
{
if (touchCount >= 2)
{
var distance = this.Distance(e.GetX(0), e.GetX(1), e.GetY(0), e.GetY(1));
m_PreviousDistance = distance;
m_IsScaling = true;
var parent = this.Parent;
var scrollview = parent.Parent;
scrollview.RequestDisallowInterceptTouchEvent(true);
scrollview.Parent.RequestDisallowInterceptTouchEvent(true);
}
}
break;
case MotionEventActions.Move:
{
if (touchCount >= 2 && m_IsScaling)
{
var distance = this.Distance(e.GetX(0), e.GetX(1), e.GetY(0), e.GetY(1));
var scale = (distance - m_PreviousDistance)/this.DispDistance();
m_PreviousDistance = distance;
scale += 1;
scale = scale * scale;
this.ZoomTo(scale, m_Width/2, m_Height/2);
this.Cutting();
}
else if (!m_IsScaling)
{
var distanceX = m_PreviousMoveX - (int)e.GetX();
var distanceY = m_PreviousMoveY - (int)e.GetY();
m_PreviousMoveX = (int)e.GetX();
m_PreviousMoveY = (int)e.GetY();
m_Matrix.PostTranslate(-distanceX, -distanceY);
this.Cutting();
}
}
break;
case MotionEventActions.Up:
case MotionEventActions.Pointer1Up:
case MotionEventActions.Pointer2Up:
{
if (touchCount <= 1)
{
m_IsScaling = false;
var parent = this.Parent;
var scrollview = parent.Parent;
scrollview.RequestDisallowInterceptTouchEvent(false);
scrollview.Parent.RequestDisallowInterceptTouchEvent(false);
}
}
break;
}
return true;
}
この解決法は私の要求に合っていません。私はリニアレイアウト全体を拡大縮小し、上下の画像を失うことなく水平方向と垂直方向にスクロールしたいと思います。これを解決するために私を助けてもらえますか? 簡単な例:Adobe Readerに表示されたPDFページのように画像を表示したいのですが、リニアレイアウトで子ども全体をズームする必要があります – SATHISH
@SATHISH、oh ...私は誤解しました。あなたのコードをテストしたところ、最初は 'ImageView'の' imgView.SetAdjustViewBounds(true); '問題だと思ったので、' ImageView'のサイズはスケーリング時に変更されません。しかし、私はそれを真に設定した後、私はまだ同じ問題を抱えています。これで今作業して...私はそれを考え出したときに私の答えを更新します。 –
更新ありがとう – SATHISH
- 1. ビューとその内容を比例して拡大/縮小する方法は?
- 2. スイフト2ビューを拡大/縮小する方法は?
- 3. Winformsアプリケーションでラベルテキストを拡大・縮小可能にするには
- 4. ArcMapでグラフィックテキストを拡大縮小する方法はありますか?
- 5. テーブルビューコントローラーなしで拡大縮小可能なメニューを作成する方法
- 6. Perlinノイズを拡大縮小可能にする
- 7. 比例してCSSファイル全体を縮小または拡大する方法はありますか?
- 8. xamarin iosプロジェクトで拡大/縮小可能なテーブルビューを作成する方法
- 9. ブートストラップパネル内でsvgを拡大/縮小する方法
- 10. Android:ビューを斜めに拡大/縮小するには?
- 11. 多くの子ビューを持つ場合、相対レイアウトをスクロール可能にする方法はありますか?
- 12. 任意のビューのコンテンツを拡大/縮小し、アニメーションを許可する
- 13. ズームスケールを使用して、理由でキャンバスを拡大/縮小する方法はありますか?
- 14. レスポンシブルデザインのナビゲーションアイコンを拡大縮小することは可能ですか?
- 15. ビューの高さを子ビューの内容に応じて拡大する方法
- 16. ボタンでAndroidの画像ビューを拡大/縮小する方法は?
- 17. UIImagePickerControllerの拡大/縮小コントロールを無効にする方法は?
- 18. Androidでビューを拡大縮小できますか?
- 19. 拡大縮小CSSを使用して自動的に拡大縮小img
- 20. iframe内の特定の要素に応じて拡大縮小する方法
- 21. 画像を一方向に拡大縮小する方法はありますか?
- 22. Javascriptで複数の画像を拡大/縮小/拡大/縮小する最適な方法は?
- 23. TabBarItemイメージの拡大/縮小方法
- 24. iOS拡大可能な画像の上にUIButtonの位置を固定して、画像を拡大して拡大/縮小するようにしました。
- 25. HTML5キャンバスでスムーズにパターンイメージを拡大/縮小する方法は?
- 26. 親ビューと子ビューの両方をスクロール可能にする方法
- 27. linearlayout/textviewsはスクロール可能ですか?
- 28. スタッター:規模拡大縮小子要素
- 29. スクロール可能なLinearLayout内でEditTextをスクロール可能にするにはどうすればよいですか?
- 30. NSViewまたは拡大鏡を使用して拡大/縮小する
私の解決策を試しましたか?すべてのアップデート? –
こんにちは@ GraceFeng-MSFT、 私は今日あなたを確認し、更新します。 – SATHISH