2017-08-04 61 views
0

我已經實現了縮放以縮放我的文本視圖。它工作正常,沒有滾動。但我想要縮放和滾動,因爲我有很長的內容。當我放置滾動時,縮放和滾動可以正常工作,但不能平滑加上,我只能在水平方向上移動手指。如果我將手指倒過來然後滾動。如何進行平滑滾動並捏合以同時在垂直和水平方向上進行縮放

ZoomView.java

public class ZoomView extends TextView { 
private static final String TAG = "ZoomTextView"; 
private ScaleGestureDetector mScaleDetector; 

private float mScaleFactor = 1.f; 
private float defaultSize; 

private float zoomLimit = 3.0f; 


public ZoomView(Context context) { 
    super(context); 
    initialize(); 
} 

public ZoomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(); 
} 

public ZoomView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    initialize(); 
} 

private void initialize() { 
    defaultSize = getTextSize(); 
    mScaleDetector = new ScaleGestureDetector(getContext(), new ScaleListener()); 

} 

public void setZoomLimit(float zoomLimit) { 
    this.zoomLimit = zoomLimit; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

@Override 
public boolean onTouchEvent(@NonNull MotionEvent ev) { 
    super.onTouchEvent(ev); 
    mScaleDetector.onTouchEvent(ev); 
    return true; 
} 

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     mScaleFactor *= detector.getScaleFactor(); 
     mScaleFactor = Math.max(1.0f, Math.min(mScaleFactor, zoomLimit)); 
     setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultSize * mScaleFactor); 
     Log.e(TAG, String.valueOf(mScaleFactor)); 
     return true; 
    } 
} 
} 

Vithale.java

public class vithale extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_vithale); 
} 
} 

activity_vithale.xml

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
<ScrollView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/sc"> 
<com.example.acer.myapplication.ZoomView 
    android:id="@+id/iop" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="@string/twentyfive"/> 
</ScrollView> 
</RelativeLayout> 
+0

你可以使用Sensey庫來實現你的目標https://github.com/nisrulz/sensey –

+0

@MohitCharadva你能幫我解釋一下如何在我的項目中實現這個功能嗎? – Devk

回答

0

只要加上此行vithale.java固定的縮放和滾動的問題,但唯一的一點是滾動不平滑

ZoomView iop =(ZoomView)findViewById(R.id.iop); iop.setMovementMethod(new ScrollingMovementMethod());