2013-08-21 4 views
0

I가 다음 그리고 TestView 클래스 :액티비티에 drawLine 색상을 변경하는 방법

package com.example.tview; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Typeface; 
import android.view.Gravity; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.FrameLayout; 

public class TestView extends Activity { 
    FrameLayout layout; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test_view); 
     layout = (FrameLayout)findViewById(R.id.viewd); 
     //layout.removeAllViews(); 
     CustomView view = new CustomView(TestView.this); 
     view.setText("A"); 
     view.setGravity(Gravity.CENTER); 
     view.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/led.ttf")); 
     view.setTextSize(400); 
     view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 
     layout.addView(view); 
    } 
} 

있는 CustomView 클래스 :

package com.example.tview; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.Paint.Style; 
import android.view.MotionEvent; 
import android.widget.TextView; 

public class CustomView extends TextView { 
    Paint paint; 
    Path path; 
    float x = 0; 
    float y = 0; 
    private int cYellow = Color.YELLOW; 
    private int[] theColors = {Color.YELLOW, Color.BLUE, Color.GREEN, Color.BLACK, Color.RED, Color.CYAN, Color.DKGRAY, Color.WHITE, Color.BLACK, Color.MAGENTA}; 

    public CustomView(Context context) { 
     super(context); 
     paint = new Paint(); 
     path= new Path(); 
     paint.setAlpha(255); 
     paint.setColor(cYellow); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(20); 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawPath(path,paint); 
     canvas.drawCircle(x, y, 10, paint); 
    } 

    public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getAction(); 
     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(event.getX(), event.getY()); 
      path.lineTo(event.getX(), event.getY()); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      x = event.getX(); 
      y = event.getY(); 
      path.lineTo(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      path.lineTo(event.getX(), event.getY()); 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
     default: 
      break; 
     } 
     return true; 
    } 
} 

내 XML 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#000000" 
android:layout_gravity="center" > 

     <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="YELLOW" /> 
       <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="GREEN" /> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="250dp" 
android:orientation="vertical" 
android:background="#ffffff" 
android:layout_gravity="center" > 

<FrameLayout 
android:id="@+id/viewd" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/bd" 
android:orientation="vertical" > 
</FrameLayout> 
</LinearLayout> 


</LinearLayout> 

내가 가지고있는 색 내 CustomView 클래스의 배열 설정, 런타임에 획 색상을 어떻게 설정할 수 있습니까? 그래서 기본적으로는 Color.YELLOW해야하지만 난 Green 버튼을 누르면 획 색상은해야 Color.GREEN

그리고 TestView 클래스 UPDATE (일) :

package com.example.tview; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Typeface; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class TestView extends Activity { 
    FrameLayout layout; 
    Paint paint; 
    public int paintColor = Color.GREEN; 
    CustomView view; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test_view); 
     layout = (FrameLayout)findViewById(R.id.viewd); 
     //layout.removeAllViews(); 
     view = new CustomView(TestView.this); 
     view.setText("A"); 
     view.setGravity(Gravity.CENTER); 
     view.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/led.ttf")); 
     view.setTextSize(400); 
     view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 
     layout.addView(view); 

     Button btn2 = (Button) findViewById(R.id.button2); 
     btn2.setOnClickListener(eHandle); 
    } 
    View.OnClickListener eHandle = new View.OnClickListener() { 
     public void onClick(View v) { 
      view.paint.setColor(paintColor); 
     } 
    }; 
} 

답변

1

당신은 당신이 그리는 whihc 사용하여 페인트를 정의 캔버스에. 버튼을 누를 때에 당신의 페인트에 적절한 색상을 설정 :

paint.setColor(Color); 

을 누르면 everytme이 라인에 적절한 색을 설정 버튼

+0

은'theColor'는 정수 배열 및 설정 색상이 다른 클래스에 있기 때문에 나는 그것을 어떻게 성취합니까? –

+1

전역 변수 paintColor를 int로 지정하십시오. 각 버튼에 대한 청취자를 작성하십시오. 클릭하면, 리스너에서 paintColor 변수에 적절한 값을 할당합니다. 이제 페인트는 글로벌 변수입니다. 그래서 언제든지 다음과 같이 setColor를 설정할 수 있습니다 : paint.setColor (paintColor). 그러면 theColors 배열이 필요 없습니다. 나는 당신이 내 뜻을 이해하기를 바랍니다. 그것의 더 많은 프로그래밍 논리는 이제 – Sushil

+0

나는 이해합니다. 그들은 diff 수업을하고 있지만 의사 소통을 할 수 있습니까? –

관련 문제